xref: /aosp_15_r20/external/llvm/test/Transforms/SimplifyCFG/switch-to-icmp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -simplifycfg < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test1(i32 %x) nounwind readnone ssp noredzone {
4*9880d681SAndroid Build Coastguard Workerentry:
5*9880d681SAndroid Build Coastguard Worker switch i32 %x, label %lor.rhs [
6*9880d681SAndroid Build Coastguard Worker   i32 2, label %lor.end
7*9880d681SAndroid Build Coastguard Worker   i32 1, label %lor.end
8*9880d681SAndroid Build Coastguard Worker   i32 3, label %lor.end
9*9880d681SAndroid Build Coastguard Worker ]
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerlor.rhs:
12*9880d681SAndroid Build Coastguard Worker br label %lor.end
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerlor.end:
15*9880d681SAndroid Build Coastguard Worker %0 = phi i1 [ true, %entry ], [ false, %lor.rhs ], [ true, %entry ], [ true, %entry ]
16*9880d681SAndroid Build Coastguard Worker ret i1 %0
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1(
19*9880d681SAndroid Build Coastguard Worker; CHECK: %x.off = add i32 %x, -1
20*9880d681SAndroid Build Coastguard Worker; CHECK: %switch = icmp ult i32 %x.off, 3
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test2(i32 %x) nounwind readnone ssp noredzone {
24*9880d681SAndroid Build Coastguard Workerentry:
25*9880d681SAndroid Build Coastguard Worker switch i32 %x, label %lor.rhs [
26*9880d681SAndroid Build Coastguard Worker   i32 0, label %lor.end
27*9880d681SAndroid Build Coastguard Worker   i32 1, label %lor.end
28*9880d681SAndroid Build Coastguard Worker ]
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerlor.rhs:
31*9880d681SAndroid Build Coastguard Worker br label %lor.end
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerlor.end:
34*9880d681SAndroid Build Coastguard Worker %0 = phi i1 [ true, %entry ], [ false, %lor.rhs ], [ true, %entry ]
35*9880d681SAndroid Build Coastguard Worker ret i1 %0
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2(
38*9880d681SAndroid Build Coastguard Worker; CHECK: %switch = icmp ult i32 %x, 2
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine i32 @test3(i1 %flag) {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker switch i1 %flag, label %bad [
44*9880d681SAndroid Build Coastguard Worker   i1 true, label %good
45*9880d681SAndroid Build Coastguard Worker   i1 false, label %good
46*9880d681SAndroid Build Coastguard Worker ]
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workergood:
49*9880d681SAndroid Build Coastguard Worker ret i32 0
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerbad:
52*9880d681SAndroid Build Coastguard Worker ret i32 1
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3(
55*9880d681SAndroid Build Coastguard Worker; CHECK: entry:
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0
57*9880d681SAndroid Build Coastguard Worker}
58