brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 1d7d9ef Raw
81 lines · plain
1; RUN: llc -mtriple=aarch64-none-linux-gnu -enable-machine-outliner < %s | FileCheck %s --check-prefix=BTI2; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel -enable-machine-outliner < %s | \3; RUN: FileCheck %s --check-prefix=BTI4; RUN: llc -mtriple=aarch64-none-linux-gnu -fast-isel -enable-machine-outliner < %s | \5; RUN: FileCheck %s --check-prefix=BTI6; RUN: llc -mtriple=aarch64-none-linux-gnu -enable-machine-outliner -mattr=+no-bti-at-return-twice < %s | \7; RUN: FileCheck %s --check-prefix=NOBTI8; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel -enable-machine-outliner -mattr=+no-bti-at-return-twice < %s | \9; RUN: FileCheck %s --check-prefix=NOBTI10; RUN: llc -mtriple=aarch64-none-linux-gnu -fast-isel -enable-machine-outliner -mattr=+no-bti-at-return-twice < %s | \11; RUN: FileCheck %s --check-prefix=NOBTI12 13; Check that the outliner does not split up the call to setjmp and the bti after it.14; When we do not insert a bti, it is allowed to move the setjmp call into an outlined function.15 16; C source17; --------18; extern int setjmp(ptr);19;20; int f(int a, int b, int c, int d) {21;   setjmp(0);22;   return 1 + a * (a + b) / (c + d);23; }24;25; int g(int a, int b, int c, int d) {26;   setjmp(0);27;   return 2 + a * (a + b) / (c + d);28; }29 30define i32 @f(i32 noundef %a, i32 noundef %b, i32 noundef %c, i32 noundef %d) #0 {31; BTI-LABEL: f:32; BTI:         bl      OUTLINED_FUNCTION_133; BTI-NEXT:    bl      setjmp34; BTI-NEXT:    hint    #3635; BTI-NEXT:    bl      OUTLINED_FUNCTION_036 37; NOBTI:      f:38; NOBTI:        bl      OUTLINED_FUNCTION_039; NOBTI-NEXT:   bl      OUTLINED_FUNCTION_140 41entry:42  %call = call i32 @setjmp(ptr noundef null) #143  %add = add nsw i32 %b, %a44  %mul = mul nsw i32 %add, %a45  %add1 = add nsw i32 %d, %c46  %div = sdiv i32 %mul, %add147  %add2 = add nsw i32 %div, 148  ret i32 %add249}50 51declare i32 @setjmp(ptr noundef) #052 53define i32 @g(i32 noundef %a, i32 noundef %b, i32 noundef %c, i32 noundef %d) #0 {54; BTI-LABEL: g:55; BTI:         bl      OUTLINED_FUNCTION_156; BTI-NEXT:    bl      setjmp57; BTI-NEXT:    hint    #3658; BTI-NEXT:    bl      OUTLINED_FUNCTION_059 60; NOBTI:      g:61; NOBTI:        bl      OUTLINED_FUNCTION_062; NOBTI-NEXT:   bl      OUTLINED_FUNCTION_163 64entry:65  %call = call i32 @setjmp(ptr noundef null) #166  %add = add nsw i32 %b, %a67  %mul = mul nsw i32 %add, %a68  %add1 = add nsw i32 %d, %c69  %div = sdiv i32 %mul, %add170  %add2 = add nsw i32 %div, 271  ret i32 %add272}73 74; NOBTI-LABEL: OUTLINED_FUNCTION_0:75; NOBTI:         b       setjmp76; NOBTI:       OUTLINED_FUNCTION_1:77; NOBTI-LABEL:   ret78 79attributes #0 = { "branch-target-enforcement" }80attributes #1 = { returns_twice }81