[llvm] 53a397a - [PhaseOrdering] Add test for failure to inline simplifiable switch
    Nikita Popov via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Wed Oct  8 02:26:23 PDT 2025
    
    
  
Author: Nikita Popov
Date: 2025-10-08T11:26:13+02:00
New Revision: 53a397a9cb8acaa61d29dfa13a03ad17fb51755c
URL: https://github.com/llvm/llvm-project/commit/53a397a9cb8acaa61d29dfa13a03ad17fb51755c
DIFF: https://github.com/llvm/llvm-project/commit/53a397a9cb8acaa61d29dfa13a03ad17fb51755c.diff
LOG: [PhaseOrdering] Add test for failure to inline simplifiable switch
The large switch simplifies to a single umin, but only after
inlining, so the trivial call in test2() does not get inlined.
Added: 
    llvm/test/Transforms/PhaseOrdering/switch-to-arithmetic-inlining.ll
Modified: 
    
Removed: 
    
################################################################################
diff  --git a/llvm/test/Transforms/PhaseOrdering/switch-to-arithmetic-inlining.ll b/llvm/test/Transforms/PhaseOrdering/switch-to-arithmetic-inlining.ll
new file mode 100644
index 0000000000000..caf7a801dfc51
--- /dev/null
+++ b/llvm/test/Transforms/PhaseOrdering/switch-to-arithmetic-inlining.ll
@@ -0,0 +1,447 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S -O3 < %s | FileCheck %s
+
+target datalayout = "n64:32:16:8"
+
+define i8 @test(i8 %x) {
+; CHECK-LABEL: define range(i8 0, 53) i8 @test(
+; CHECK-SAME: i8 [[X:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:  [[START:.*:]]
+; CHECK-NEXT:    [[X_:%.*]] = tail call i8 @llvm.umin.i8(i8 [[X]], i8 52)
+; CHECK-NEXT:    ret i8 [[X_]]
+;
+start:
+  %_0 = alloca [1 x i8], align 1
+  %0 = icmp eq i8 %x, 0
+  br i1 %0, label %bb1, label %bb2
+
+bb1:                                              ; preds = %start
+  store i8 0, ptr %_0, align 1
+  br label %bb105
+
+bb2:                                              ; preds = %start
+  %1 = icmp eq i8 %x, 1
+  br i1 %1, label %bb3, label %bb4
+
+bb105:                                            ; preds = %bb104, %bb103, %bb101, %bb99, %bb97, %bb95, %bb93, %bb91, %bb89, %bb87, %bb85, %bb83, %bb81, %bb79, %bb77, %bb75, %bb73, %bb71, %bb69, %bb67, %bb65, %bb63, %bb61, %bb59, %bb57, %bb55, %bb53, %bb51, %bb49, %bb47, %bb45, %bb43, %bb41, %bb39, %bb37, %bb35, %bb33, %bb31, %bb29, %bb27, %bb25, %bb23, %bb21, %bb19, %bb17, %bb15, %bb13, %bb11, %bb9, %bb7, %bb5, %bb3, %bb1
+  %2 = load i8, ptr %_0, align 1
+  ret i8 %2
+
+bb3:                                              ; preds = %bb2
+  store i8 1, ptr %_0, align 1
+  br label %bb105
+
+bb4:                                              ; preds = %bb2
+  %3 = icmp eq i8 %x, 2
+  br i1 %3, label %bb5, label %bb6
+
+bb5:                                              ; preds = %bb4
+  store i8 2, ptr %_0, align 1
+  br label %bb105
+
+bb6:                                              ; preds = %bb4
+  %4 = icmp eq i8 %x, 3
+  br i1 %4, label %bb7, label %bb8
+
+bb7:                                              ; preds = %bb6
+  store i8 3, ptr %_0, align 1
+  br label %bb105
+
+bb8:                                              ; preds = %bb6
+  %5 = icmp eq i8 %x, 4
+  br i1 %5, label %bb9, label %bb10
+
+bb9:                                              ; preds = %bb8
+  store i8 4, ptr %_0, align 1
+  br label %bb105
+
+bb10:                                             ; preds = %bb8
+  %6 = icmp eq i8 %x, 5
+  br i1 %6, label %bb11, label %bb12
+
+bb11:                                             ; preds = %bb10
+  store i8 5, ptr %_0, align 1
+  br label %bb105
+
+bb12:                                             ; preds = %bb10
+  %7 = icmp eq i8 %x, 6
+  br i1 %7, label %bb13, label %bb14
+
+bb13:                                             ; preds = %bb12
+  store i8 6, ptr %_0, align 1
+  br label %bb105
+
+bb14:                                             ; preds = %bb12
+  %8 = icmp eq i8 %x, 7
+  br i1 %8, label %bb15, label %bb16
+
+bb15:                                             ; preds = %bb14
+  store i8 7, ptr %_0, align 1
+  br label %bb105
+
+bb16:                                             ; preds = %bb14
+  %9 = icmp eq i8 %x, 8
+  br i1 %9, label %bb17, label %bb18
+
+bb17:                                             ; preds = %bb16
+  store i8 8, ptr %_0, align 1
+  br label %bb105
+
+bb18:                                             ; preds = %bb16
+  %10 = icmp eq i8 %x, 9
+  br i1 %10, label %bb19, label %bb20
+
+bb19:                                             ; preds = %bb18
+  store i8 9, ptr %_0, align 1
+  br label %bb105
+
+bb20:                                             ; preds = %bb18
+  %11 = icmp eq i8 %x, 10
+  br i1 %11, label %bb21, label %bb22
+
+bb21:                                             ; preds = %bb20
+  store i8 10, ptr %_0, align 1
+  br label %bb105
+
+bb22:                                             ; preds = %bb20
+  %12 = icmp eq i8 %x, 11
+  br i1 %12, label %bb23, label %bb24
+
+bb23:                                             ; preds = %bb22
+  store i8 11, ptr %_0, align 1
+  br label %bb105
+
+bb24:                                             ; preds = %bb22
+  %13 = icmp eq i8 %x, 12
+  br i1 %13, label %bb25, label %bb26
+
+bb25:                                             ; preds = %bb24
+  store i8 12, ptr %_0, align 1
+  br label %bb105
+
+bb26:                                             ; preds = %bb24
+  %14 = icmp eq i8 %x, 13
+  br i1 %14, label %bb27, label %bb28
+
+bb27:                                             ; preds = %bb26
+  store i8 13, ptr %_0, align 1
+  br label %bb105
+
+bb28:                                             ; preds = %bb26
+  %15 = icmp eq i8 %x, 14
+  br i1 %15, label %bb29, label %bb30
+
+bb29:                                             ; preds = %bb28
+  store i8 14, ptr %_0, align 1
+  br label %bb105
+
+bb30:                                             ; preds = %bb28
+  %16 = icmp eq i8 %x, 15
+  br i1 %16, label %bb31, label %bb32
+
+bb31:                                             ; preds = %bb30
+  store i8 15, ptr %_0, align 1
+  br label %bb105
+
+bb32:                                             ; preds = %bb30
+  %17 = icmp eq i8 %x, 16
+  br i1 %17, label %bb33, label %bb34
+
+bb33:                                             ; preds = %bb32
+  store i8 16, ptr %_0, align 1
+  br label %bb105
+
+bb34:                                             ; preds = %bb32
+  %18 = icmp eq i8 %x, 17
+  br i1 %18, label %bb35, label %bb36
+
+bb35:                                             ; preds = %bb34
+  store i8 17, ptr %_0, align 1
+  br label %bb105
+
+bb36:                                             ; preds = %bb34
+  %19 = icmp eq i8 %x, 18
+  br i1 %19, label %bb37, label %bb38
+
+bb37:                                             ; preds = %bb36
+  store i8 18, ptr %_0, align 1
+  br label %bb105
+
+bb38:                                             ; preds = %bb36
+  %20 = icmp eq i8 %x, 19
+  br i1 %20, label %bb39, label %bb40
+
+bb39:                                             ; preds = %bb38
+  store i8 19, ptr %_0, align 1
+  br label %bb105
+
+bb40:                                             ; preds = %bb38
+  %21 = icmp eq i8 %x, 20
+  br i1 %21, label %bb41, label %bb42
+
+bb41:                                             ; preds = %bb40
+  store i8 20, ptr %_0, align 1
+  br label %bb105
+
+bb42:                                             ; preds = %bb40
+  %22 = icmp eq i8 %x, 21
+  br i1 %22, label %bb43, label %bb44
+
+bb43:                                             ; preds = %bb42
+  store i8 21, ptr %_0, align 1
+  br label %bb105
+
+bb44:                                             ; preds = %bb42
+  %23 = icmp eq i8 %x, 22
+  br i1 %23, label %bb45, label %bb46
+
+bb45:                                             ; preds = %bb44
+  store i8 22, ptr %_0, align 1
+  br label %bb105
+
+bb46:                                             ; preds = %bb44
+  %24 = icmp eq i8 %x, 23
+  br i1 %24, label %bb47, label %bb48
+
+bb47:                                             ; preds = %bb46
+  store i8 23, ptr %_0, align 1
+  br label %bb105
+
+bb48:                                             ; preds = %bb46
+  %25 = icmp eq i8 %x, 24
+  br i1 %25, label %bb49, label %bb50
+
+bb49:                                             ; preds = %bb48
+  store i8 24, ptr %_0, align 1
+  br label %bb105
+
+bb50:                                             ; preds = %bb48
+  %26 = icmp eq i8 %x, 25
+  br i1 %26, label %bb51, label %bb52
+
+bb51:                                             ; preds = %bb50
+  store i8 25, ptr %_0, align 1
+  br label %bb105
+
+bb52:                                             ; preds = %bb50
+  %27 = icmp eq i8 %x, 26
+  br i1 %27, label %bb53, label %bb54
+
+bb53:                                             ; preds = %bb52
+  store i8 26, ptr %_0, align 1
+  br label %bb105
+
+bb54:                                             ; preds = %bb52
+  %28 = icmp eq i8 %x, 27
+  br i1 %28, label %bb55, label %bb56
+
+bb55:                                             ; preds = %bb54
+  store i8 27, ptr %_0, align 1
+  br label %bb105
+
+bb56:                                             ; preds = %bb54
+  %29 = icmp eq i8 %x, 28
+  br i1 %29, label %bb57, label %bb58
+
+bb57:                                             ; preds = %bb56
+  store i8 28, ptr %_0, align 1
+  br label %bb105
+
+bb58:                                             ; preds = %bb56
+  %30 = icmp eq i8 %x, 29
+  br i1 %30, label %bb59, label %bb60
+
+bb59:                                             ; preds = %bb58
+  store i8 29, ptr %_0, align 1
+  br label %bb105
+
+bb60:                                             ; preds = %bb58
+  %31 = icmp eq i8 %x, 30
+  br i1 %31, label %bb61, label %bb62
+
+bb61:                                             ; preds = %bb60
+  store i8 30, ptr %_0, align 1
+  br label %bb105
+
+bb62:                                             ; preds = %bb60
+  %32 = icmp eq i8 %x, 31
+  br i1 %32, label %bb63, label %bb64
+
+bb63:                                             ; preds = %bb62
+  store i8 31, ptr %_0, align 1
+  br label %bb105
+
+bb64:                                             ; preds = %bb62
+  %33 = icmp eq i8 %x, 32
+  br i1 %33, label %bb65, label %bb66
+
+bb65:                                             ; preds = %bb64
+  store i8 32, ptr %_0, align 1
+  br label %bb105
+
+bb66:                                             ; preds = %bb64
+  %34 = icmp eq i8 %x, 33
+  br i1 %34, label %bb67, label %bb68
+
+bb67:                                             ; preds = %bb66
+  store i8 33, ptr %_0, align 1
+  br label %bb105
+
+bb68:                                             ; preds = %bb66
+  %35 = icmp eq i8 %x, 34
+  br i1 %35, label %bb69, label %bb70
+
+bb69:                                             ; preds = %bb68
+  store i8 34, ptr %_0, align 1
+  br label %bb105
+
+bb70:                                             ; preds = %bb68
+  %36 = icmp eq i8 %x, 35
+  br i1 %36, label %bb71, label %bb72
+
+bb71:                                             ; preds = %bb70
+  store i8 35, ptr %_0, align 1
+  br label %bb105
+
+bb72:                                             ; preds = %bb70
+  %37 = icmp eq i8 %x, 36
+  br i1 %37, label %bb73, label %bb74
+
+bb73:                                             ; preds = %bb72
+  store i8 36, ptr %_0, align 1
+  br label %bb105
+
+bb74:                                             ; preds = %bb72
+  %38 = icmp eq i8 %x, 37
+  br i1 %38, label %bb75, label %bb76
+
+bb75:                                             ; preds = %bb74
+  store i8 37, ptr %_0, align 1
+  br label %bb105
+
+bb76:                                             ; preds = %bb74
+  %39 = icmp eq i8 %x, 38
+  br i1 %39, label %bb77, label %bb78
+
+bb77:                                             ; preds = %bb76
+  store i8 38, ptr %_0, align 1
+  br label %bb105
+
+bb78:                                             ; preds = %bb76
+  %40 = icmp eq i8 %x, 39
+  br i1 %40, label %bb79, label %bb80
+
+bb79:                                             ; preds = %bb78
+  store i8 39, ptr %_0, align 1
+  br label %bb105
+
+bb80:                                             ; preds = %bb78
+  %41 = icmp eq i8 %x, 40
+  br i1 %41, label %bb81, label %bb82
+
+bb81:                                             ; preds = %bb80
+  store i8 40, ptr %_0, align 1
+  br label %bb105
+
+bb82:                                             ; preds = %bb80
+  %42 = icmp eq i8 %x, 41
+  br i1 %42, label %bb83, label %bb84
+
+bb83:                                             ; preds = %bb82
+  store i8 41, ptr %_0, align 1
+  br label %bb105
+
+bb84:                                             ; preds = %bb82
+  %43 = icmp eq i8 %x, 42
+  br i1 %43, label %bb85, label %bb86
+
+bb85:                                             ; preds = %bb84
+  store i8 42, ptr %_0, align 1
+  br label %bb105
+
+bb86:                                             ; preds = %bb84
+  %44 = icmp eq i8 %x, 43
+  br i1 %44, label %bb87, label %bb88
+
+bb87:                                             ; preds = %bb86
+  store i8 43, ptr %_0, align 1
+  br label %bb105
+
+bb88:                                             ; preds = %bb86
+  %45 = icmp eq i8 %x, 44
+  br i1 %45, label %bb89, label %bb90
+
+bb89:                                             ; preds = %bb88
+  store i8 44, ptr %_0, align 1
+  br label %bb105
+
+bb90:                                             ; preds = %bb88
+  %46 = icmp eq i8 %x, 45
+  br i1 %46, label %bb91, label %bb92
+
+bb91:                                             ; preds = %bb90
+  store i8 45, ptr %_0, align 1
+  br label %bb105
+
+bb92:                                             ; preds = %bb90
+  %47 = icmp eq i8 %x, 46
+  br i1 %47, label %bb93, label %bb94
+
+bb93:                                             ; preds = %bb92
+  store i8 46, ptr %_0, align 1
+  br label %bb105
+
+bb94:                                             ; preds = %bb92
+  %48 = icmp eq i8 %x, 47
+  br i1 %48, label %bb95, label %bb96
+
+bb95:                                             ; preds = %bb94
+  store i8 47, ptr %_0, align 1
+  br label %bb105
+
+bb96:                                             ; preds = %bb94
+  %49 = icmp eq i8 %x, 48
+  br i1 %49, label %bb97, label %bb98
+
+bb97:                                             ; preds = %bb96
+  store i8 48, ptr %_0, align 1
+  br label %bb105
+
+bb98:                                             ; preds = %bb96
+  %50 = icmp eq i8 %x, 49
+  br i1 %50, label %bb99, label %bb100
+
+bb99:                                             ; preds = %bb98
+  store i8 49, ptr %_0, align 1
+  br label %bb105
+
+bb100:                                            ; preds = %bb98
+  %51 = icmp eq i8 %x, 50
+  br i1 %51, label %bb101, label %bb102
+
+bb101:                                            ; preds = %bb100
+  store i8 50, ptr %_0, align 1
+  br label %bb105
+
+bb102:                                            ; preds = %bb100
+  %52 = icmp eq i8 %x, 51
+  br i1 %52, label %bb103, label %bb104
+
+bb103:                                            ; preds = %bb102
+  store i8 51, ptr %_0, align 1
+  br label %bb105
+
+bb104:                                            ; preds = %bb102
+  store i8 52, ptr %_0, align 1
+  br label %bb105
+}
+
+define i8 @test2(i8 %x) {
+; CHECK-LABEL: define range(i8 0, 53) i8 @test2(
+; CHECK-SAME: i8 [[X:%.*]]) local_unnamed_addr #[[ATTR0]] {
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i8 @test(i8 [[X]])
+; CHECK-NEXT:    ret i8 [[CALL]]
+;
+  %call = call i8 @test(i8 %x)
+  ret i8 %call
+}
        
    
    
More information about the llvm-commits
mailing list