xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/2016-04-28-setjmp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -filetype=obj <%s | llvm-objdump --disassemble - | FileCheck %s
2*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-n32:64"
3*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64le-unknown-linux-gnu"
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker@ptr = common global i8* null, align 8
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; Verify there's no junk between these two instructions from misemitted
8*9880d681SAndroid Build Coastguard Worker; EH_SjLj_Setup.
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; CHECK: li 3, 1
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: b .+4
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine void @h() nounwind {
14*9880d681SAndroid Build Coastguard Worker  %1 = load i8**, i8*** bitcast (i8** @ptr to i8***), align 8
15*9880d681SAndroid Build Coastguard Worker  %2 = tail call i8* @llvm.frameaddress(i32 0)
16*9880d681SAndroid Build Coastguard Worker  store i8* %2, i8** %1, align 8
17*9880d681SAndroid Build Coastguard Worker  %3 = tail call i8* @llvm.stacksave()
18*9880d681SAndroid Build Coastguard Worker  %4 = getelementptr inbounds i8*, i8** %1, i64 2
19*9880d681SAndroid Build Coastguard Worker  store i8* %3, i8** %4, align 8
20*9880d681SAndroid Build Coastguard Worker  %5 = bitcast i8** %1 to i8*
21*9880d681SAndroid Build Coastguard Worker  %6 = tail call i32 @llvm.eh.sjlj.setjmp(i8* %5)
22*9880d681SAndroid Build Coastguard Worker  %7 = icmp eq i32 %6, 0
23*9880d681SAndroid Build Coastguard Worker  br i1 %7, label %9, label %8
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; <label>:8:                                      ; preds = %0
26*9880d681SAndroid Build Coastguard Worker  tail call void @g()
27*9880d681SAndroid Build Coastguard Worker  br label %10
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; <label>:9:                                      ; preds = %0
30*9880d681SAndroid Build Coastguard Worker  tail call void @f()
31*9880d681SAndroid Build Coastguard Worker  br label %10
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker; <label>:10:                                     ; preds = %9, %8
34*9880d681SAndroid Build Coastguard Worker  ret void
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
38*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.frameaddress(i32)
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
41*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.stacksave()
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
44*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.eh.sjlj.setjmp(i8*)
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdeclare void @g()
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdeclare void @f()
49