Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / ARM / setjmp-bti-basic.ll
blob3b01e3e9327e440119fc2c851edbbfa39efda5eb
1 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi < %s | FileCheck %s --check-prefix=BTI
2 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+no-bti-at-return-twice < %s | \
3 ; RUN: FileCheck %s --check-prefix=NOBTI
5 ; C source
6 ; --------
7 ; jmp_buf buf;
9 ; extern void bar(int x);
11 ; int foo(int x) {
12 ;   if (setjmp(buf))
13 ;     x = 0;
14 ;   else
15 ;     bar(x);
16 ;   return x;
17 ; }
19 @buf = global [20 x i64] zeroinitializer, align 8
21 define i32 @foo(i32 %x)  "branch-target-enforcement" {
22 ; BTI-LABEL: foo:
23 ; BTI:       bl setjmp
24 ; BTI-NEXT:  bti
25 ; NOBTI-LABEL: foo:
26 ; NOBTI:       bl setjmp
27 ; NOBTI-NOT:   bti
29 entry:
30   %call = call i32 @setjmp(ptr @buf) #0
31   %tobool.not = icmp eq i32 %call, 0
32   br i1 %tobool.not, label %if.else, label %if.end
34 if.else:                                          ; preds = %entry
35   call void @bar(i32 %x)
36   br label %if.end
38 if.end:                                           ; preds = %entry, %if.else
39   %x.addr.0 = phi i32 [ %x, %if.else ], [ 0, %entry ]
40   ret i32 %x.addr.0
43 declare void @bar(i32)
44 declare i32 @setjmp(ptr) #0
46 attributes #0 = { returns_twice }