xref: /aosp_15_r20/external/llvm/test/Transforms/InstCombine/pr26992.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -instcombine -S < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-pc-windows-msvc"
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine i1 @test1(i8* %p) personality i32 (...)* @__CxxFrameHandler3 {
5*9880d681SAndroid Build Coastguard Workerentry:
6*9880d681SAndroid Build Coastguard Worker  %a = getelementptr i8, i8* %p, i64 1
7*9880d681SAndroid Build Coastguard Worker  invoke void @may_throw()
8*9880d681SAndroid Build Coastguard Worker          to label %invoke.cont unwind label %catch.dispatch
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerinvoke.cont:
11*9880d681SAndroid Build Coastguard Worker  %b = getelementptr inbounds i8, i8* %a, i64 1
12*9880d681SAndroid Build Coastguard Worker  invoke void @may_throw()
13*9880d681SAndroid Build Coastguard Worker          to label %exit unwind label %catch.dispatch
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workercatch.dispatch:
16*9880d681SAndroid Build Coastguard Worker  %c = phi i8* [ %b, %invoke.cont ], [ %a, %entry ]
17*9880d681SAndroid Build Coastguard Worker  %tmp1 = catchswitch within none [label %catch] unwind to caller
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workercatch:
20*9880d681SAndroid Build Coastguard Worker  %tmp2 = catchpad within %tmp1 [i8* null, i32 64, i8* null]
21*9880d681SAndroid Build Coastguard Worker  catchret from %tmp2 to label %exit
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerexit:
24*9880d681SAndroid Build Coastguard Worker  %d = phi i8* [ %a, %invoke.cont ], [ %c, %catch ]
25*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i8* %d, %a
26*9880d681SAndroid Build Coastguard Worker  ret i1 %cmp
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define i1 @test1(
30*9880d681SAndroid Build Coastguard Worker; CHECK:  %[[gep_a:.*]] = getelementptr i8, i8* %p, i64 1
31*9880d681SAndroid Build Coastguard Worker; CHECK:  %[[gep_b:.*]] = getelementptr inbounds i8, i8* %p, i64 2
32*9880d681SAndroid Build Coastguard Worker; CHECK:  phi i8* [ %[[gep_b]], {{.*}} ], [ %[[gep_a]], {{.*}} ]
33*9880d681SAndroid Build Coastguard Worker; CHECK:  %tmp1 = catchswitch within none [label %catch] unwind to caller
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdeclare void @may_throw()
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdeclare i32 @__CxxFrameHandler3(...)
38