regression: +58 insts: select_fcmp_uno (double-select-fcmp.ll)
| Run: | main-04ca53e65f-20261014-105623 |
| Kind: | regression |
| Category: | +58 insts: select_fcmp_uno (double-select-fcmp.ll) |
| Occurrences: | 1 in 1 configs, 1 test files |
| Snippet from: | double-select-fcmp.65bd52d53b.ll (mutant of double-select-fcmp.ll) @select_fcmp_uno via llvm-extract |
| Config: | -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs -target-abi=ilp32 |
| Local check: | reproduces at 04ca53e65f |
| Compiler Explorer: | not uploaded (over --godbolt-limit or disabled) |
Snippet:
@G = external global i128
@G.1 = external global i128
; Function Attrs: nounwind
define double @select_fcmp_uno(double %a, double %b) #0 {
%LGV1 = load i128, ptr @G.1, align 4
%LGV = load i128, ptr @G, align 4
%1 = fcmp uno double %a, %b
%B = ashr i128 %LGV, %LGV1
%2 = select i1 %1, double %a, double %b
store i128 %B, ptr poison, align 4
ret double %2
}
attributes #0 = { nounwind }
Reproduce:
llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs -target-abi=ilp32 -global-isel snippet.ll -o -
llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs -target-abi=ilp32 -global-isel=0 snippet.ll -o -
Assembly diff (SelectionDAG vs GlobalISel):
--- sdag
+++ gisel
@@ -1,53 +1,132 @@
-addi sp, sp, -32
-lui a5, %hi(G)
-addi a5, a5, %lo(G)
-lui a4, %hi(G.1)
-lw a6, 0(a5)
-lw a7, 4(a5)
-lw t0, 8(a5)
-lw a4, %lo(G.1)(a4)
-lw a5, 12(a5)
-feq.d t1, a2, a2
-feq.d t2, a0, a0
-sw a6, 0(sp)
-sw a7, 4(sp)
-sw t0, 8(sp)
-sw a5, 12(sp)
-srli a6, a4, 3
-srai a5, a5, 31
-andi a6, a6, 12
-mv a7, sp
-sw a5, 16(sp)
-sw a5, 20(sp)
-sw a5, 24(sp)
-sw a5, 28(sp)
-add a6, a7, a6
-lw a7, 4(a6)
-lw a5, 0(a6)
-and t0, t2, t1
-lw t1, 8(a6)
-andi t2, a4, 31
-lw t3, 12(a6)
-slli a6, a7, 1
-xori t2, t2, 31
-srl a5, a5, a4
-sll a6, a6, t2
-or a5, a5, a6
-slli a6, t1, 1
-srl a7, a7, a4
-sll a6, a6, t2
-or a6, a7, a6
-slli a7, t3, 1
-srl t1, t1, a4
-sll a7, a7, t2
-or a7, t1, a7
-sra a4, t3, a4
-beqz t0, .L0
-fmv.d a0, a2
+addi sp, sp, -48
+sw ra, 44(sp)
+sw s0, 40(sp)
+sw s1, 36(sp)
+sw s2, 32(sp)
+sw s3, 28(sp)
+sw s4, 24(sp)
+sw s5, 20(sp)
+sw s6, 16(sp)
+sw s7, 12(sp)
+sw s8, 8(sp)
+fmv.d s0, a0
+fmv.d s2, a2
+lui a0, %hi(G.1)
+lui a1, %hi(G)
+addi a1, a1, %lo(G)
+lw s6, %lo(G.1)(a0)
+lw s4, 0(a1)
+lw s5, 4(a1)
+lw s8, 8(a1)
+lw s7, 12(a1)
+fmv.d a0, s0
+call __unorddf2
+li a1, 32
+neg t0, s6
+srl a5, s8, s6
+sll t1, s7, t0
+bltu s6, a1, .L0
+sra a3, s7, s6
+mv a2, s8
+bnez s6, .L1
+j .L2
.L0:
-sw a4, 0(a0)
-sw a7, 0(a0)
-sw a6, 0(a0)
-sw a5, 0(a0)
-addi sp, sp, 32
+or a3, a5, t1
+mv a2, s8
+beqz s6, .L2
+.L1:
+mv a2, a3
+.L2:
+bltu s6, a1, .L3
+srai a3, s7, 31
+srl a7, s5, s6
+j .L4
+.L3:
+srl a4, s4, s6
+sll a6, s5, t0
+sra a3, s7, s6
+or a7, a4, a6
+.L4:
+li a4, 64
+mv a6, s4
+beqz s6, .L5
+mv a6, a7
+.L5:
+sub t2, a4, s6
+bltu s6, a1, .L6
+li a7, 0
+bgeu t2, a1, .L7
+.L8:
+neg t3, t2
+srl t3, s8, t3
+sll t0, s8, t0
+or t4, t3, t1
+j .L9
+.L6:
+srl a7, s5, s6
+bltu t2, a1, .L8
+.L7:
+li t0, 0
+sll t4, s8, t2
+.L9:
+addi t3, s6, -64
+mv t1, s7
+beqz t2, .L10
+mv t1, t4
+.L10:
+bltu t3, a1, .L11
+sra a5, s7, t3
+bnez t3, .L12
+j .L13
+.L11:
+neg t2, t3
+sll t2, s7, t2
+or a5, a5, t2
+beqz t3, .L13
+.L12:
+mv s8, a5
+.L13:
+bltu t3, a1, .L14
+srai a1, s7, 31
+bltu s6, a4, .L15
+j .L16
+.L14:
+sra a1, s7, s6
+bgeu s6, a4, .L16
+.L15:
+or s8, a6, t0
+or a1, a7, t1
+.L16:
+bnez s6, .L17
+bgeu s6, a4, .L18
+.L19:
+bnez a0, .L20
+.L21:
+fmv.d s0, s2
+.L20:
+sw s4, 0(a0)
+sw s5, 4(a0)
+fmv.d a0, s0
+sw a2, 8(a0)
+sw a3, 12(a0)
+lw ra, 44(sp)
+lw s0, 40(sp)
+lw s1, 36(sp)
+lw s2, 32(sp)
+lw s3, 28(sp)
+lw s4, 24(sp)
+lw s5, 20(sp)
+lw s6, 16(sp)
+lw s7, 12(sp)
+lw s8, 8(sp)
+addi sp, sp, 48
ret
+.L17:
+mv s4, s8
+mv s5, a1
+bltu s6, a4, .L19
+.L18:
+srai a2, s7, 31
+mv a3, a2
+beqz a0, .L21
+j .L20
Occurrences (1):
| Input | Function | Config |
|---|
| double-select-fcmp.65bd52d53b.ll (mutant of double-select-fcmp.ll) | select_fcmp_uno | -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs -target-abi=ilp32 |
Generated 2026-10-15 08:05 UTC.