regression: +67 insts: shl_cttz_constant_i64 (shl-cttz.ll)

Run:explore-bc8218b282-20261015-075519
Kind:regression
Category:+67 insts: shl_cttz_constant_i64 (shl-cttz.ll)
Occurrences:1 in 1 configs, 1 test files
Snippet from:shl-cttz.048faed466.ll (mutant of shl-cttz.ll) @shl_cttz_constant_i64 via llvm-extract
Config:-mtriple=riscv32 -mattr=+m
Local check:reproduces at bc8218b282
Compiler Explorer:not uploaded (over --godbolt-limit or disabled)

Snippet:

@G = external global i1

define i64 @shl_cttz_constant_i64(i64 %y) {
entry:
  %A = alloca i128, align 8
  store i128 1, ptr %A, align 4
  %cttz = call i64 @llvm.cttz.i64(i64 %y, i1 true)
  %L = load i128, ptr %A, align 4
  switch i128 %L, label %SW_D [
    i128 318930731163887670, label %SW_C
    i128 12474326081712352415, label %SW_C1
    i128 9242542644793105854, label %SW_C2
    i128 4830656226561388135, label %SW_C3
    i128 13108546695445346743, label %SW_C4
    i128 12270436321526771585, label %SW_C5
  ]

BB:                                               ; preds = %SW_C5, %SW_C4, %SW_C3, %SW_C2, %SW_C1
  %res = shl i64 4, %cttz
  ret i64 %res

SW_D:                                             ; preds = %entry
  ret i64 -1

SW_C:                                             ; preds = %entry
  ret i64 %cttz

SW_C1:                                            ; preds = %entry
  br label %BB

SW_C2:                                            ; preds = %entry
  br label %BB

SW_C3:                                            ; preds = %entry
  br label %BB

SW_C4:                                            ; preds = %entry
  br label %BB

SW_C5:                                            ; preds = %SW_C5, %entry
  %LGV = load i1, ptr @G, align 1
  br i1 %LGV, label %SW_C5, label %BB
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.cttz.i64(i64, i1 immarg) #0

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

Reproduce:

llc -mtriple=riscv32 -mattr=+m -global-isel snippet.ll -o -
llc -mtriple=riscv32 -mattr=+m -global-isel=0 snippet.ll -o -

Assembly diff (SelectionDAG vs GlobalISel):

--- sdag
+++ gisel
@@ -1,88 +1,164 @@
 addi sp, sp, -16
-li a2, 1
-sw a2, 0(sp)
-sw zero, 4(sp)
-sw zero, 8(sp)
-sw zero, 12(sp)
-lui a4, 30667
-addi a4, a4, 1329
-lui a3, %hi(.L0)
-addi a3, a3, %lo(.L0)
-bnez a0, .L1
-neg a0, a1
-and a0, a1, a0
+mv a2, a1
+li a1, 0
+li a4, 1
+lui a5, 686711
+lui a3, 697494
+addi a3, a3, -1838
+mv a6, sp
+sw zero, 4(a6)
+sw zero, 8(a6)
+sw zero, 12(a6)
+sw a4, 0(sp)
+lui a4, 349525
+lui a6, 209715
+addi t0, a4, 1365
+addi a7, a6, 819
+lui a4, 61681
+lui t1, 4112
+addi a6, a4, -241
+addi a4, t1, 257
+beqz a0, .L0
+not a2, a0
+addi a0, a0, -1
+and a0, a2, a0
+srli a2, a0, 1
+and a2, a2, t0
+sub a0, a0, a2
+srli a2, a0, 2
+and a2, a2, a7
+and a0, a0, a7
+add a0, a2, a0
+srli a2, a0, 4
+add a0, a2, a0
+and a0, a0, a6
 mul a0, a0, a4
-srli a0, a0, 27
-add a0, a3, a0
-lbu a0, 0(a0)
+srli a0, a0, 24
+j .L1
+.L0:
+not a0, a2
+addi a2, a2, -1
+and a0, a0, a2
+srli a2, a0, 1
+and a2, a2, t0
+sub a0, a0, a2
+srli a2, a0, 2
+and a2, a2, a7
+and a0, a0, a7
+add a0, a2, a0
+srli a2, a0, 4
+add a0, a2, a0
+and a0, a0, a6
+mul a0, a0, a4
+srli a0, a0, 24
 addi a0, a0, 32
-j .L2
-lui a1, 270353
-addi a1, a1, 51
-lui a3, 745135
-xor a1, a2, a1
-addi a3, a3, -1596
-or a1, a1, a3
-beqz a1, .L3
-lui a1, 265253
-addi a1, a1, -1915
-lui a3, 709083
-xor a1, a2, a1
-addi a3, a3, 1402
-or a1, a1, a3
-beqz a1, .L3
-lui a1, 23138
-addi a1, a1, 1793
-lui a3, 697494
-xor a1, a2, a1
-addi a2, a3, -1838
-or a1, a1, a2
-bnez a1, .L4
-lui a1, %hi(G)
-lbu a1, %lo(G)(a1)
+.L1:
+lw a2, 4(sp)
+lw a4, 0(sp)
+lw a6, 8(sp)
+addi a5, a5, -127
+beq a2, a3, .L2
+sltu a7, a2, a3
+j .L3
+.L2:
+sltu a7, a4, a5
+.L3:
+xori t0, a7, 1
+lw a7, 12(sp)
+bne a6, a1, .L4
+bne a7, a1, .L5
+.L6:
+bnez t0, .L7
+.L8:
+lui a3, 438187
+lui a5, 18129
+addi a3, a3, -1994
+addi a5, a5, 463
+xor a3, a4, a3
+xor a5, a2, a5
+or a5, a3, a5
+or a3, a6, a7
+or a5, a5, a3
+beqz a5, .L9
+lui a5, 525191
+lui a6, 274591
+addi a5, a5, -409
+addi a6, a6, 62
+xor a5, a4, a5
+xor a6, a2, a6
+or a5, a5, a6
+or a5, a5, a3
+beqz a5, .L10
+lui a5, 1033390
+lui a6, 525378
+addi a5, a5, -578
+addi a6, a6, -1136
+xor a4, a4, a5
+xor a2, a2, a6
+or a2, a4, a2
+or a2, a2, a3
+beqz a2, .L10
+j .L11
+.L4:
+sltiu t0, a6, 0
+xori t0, t0, 1
+beq a7, a1, .L6
 .L5:
-bnez a1, .L5
-j .L3
-.L1:
-neg a1, a0
-and a0, a0, a1
-mul a0, a0, a4
-srli a0, a0, 27
-add a0, a3, a0
-lbu a0, 0(a0)
-.L2:
-lui a1, 525057
-addi a1, a1, -447
-lui a3, 274591
-xor a1, a2, a1
-addi a3, a3, 62
-or a1, a1, a3
-beqz a1, .L3
-lui a1, 1033454
-addi a1, a1, -66
-or a1, a2, a1
-bnez a1, .L4
-.L3:
-li a1, 4
-addi a3, a0, -32
-sll a2, a1, a0
-bltz a3, .L6
-mv a1, a2
-j .L7
-.L6:
-not a0, a0
-li a1, 2
-srl a1, a1, a0
+slti t0, a7, 0
+xori t0, t0, 1
+beqz t0, .L8
 .L7:
-srai a0, a3, 31
-and a0, a0, a2
+lui t0, 490048
+lui t1, 745135
+addi t0, t0, -1609
+addi t1, t1, -1596
+xor t0, a4, t0
+xor t1, a2, t1
+or t0, t0, t1
+or a6, a6, a7
+or a7, t0, a6
+beqz a7, .L10
+lui a7, 789935
+lui t0, 709083
+addi a7, a7, -865
+addi t0, t0, 1402
+xor a7, a4, a7
+xor t0, a2, t0
+or a7, a7, t0
+or a7, a7, a6
+beqz a7, .L10
+xor a4, a4, a5
+xor a2, a2, a3
+or a2, a4, a2
+or a2, a2, a6
+bnez a2, .L11
+lui a2, %hi(G)
+lbu a2, %lo(G)(a2)
+andi a2, a2, 1
+.L12:
+bnez a2, .L12
+.L10:
+li a2, 32
+li a3, 4
+bltu a0, a2, .L13
+li a2, 0
+sll a3, a3, a0
+bnez a0, .L14
+j .L15
+.L13:
+neg a4, a0
+sll a2, a3, a0
+srl a3, a3, a4
+beqz a0, .L15
+.L14:
+mv a1, a3
+.L15:
+mv a0, a2
 addi sp, sp, 16
 ret
-li a1, 0
+.L11:
+li a0, -1
+li a1, -1
+.L9:
 addi sp, sp, 16
 ret
-.L4:
-li a0, -1
-li a1, -1
-addi sp, sp, 16
-ret

Occurrences (1):

InputFunctionConfig
shl-cttz.048faed466.ll (mutant of shl-cttz.ll)shl_cttz_constant_i64-mtriple=riscv32 -mattr=+m

Generated 2026-10-15 08:05 UTC.