brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 5f2c9fc Raw
68 lines · plain
1; RUN: llc -mtriple=thumbv7m-eabi %s -o - | FileCheck %s2 3; Check an edge case of the outlining costs -4; outlining occurs in this test and does not in `bti-outliner-cost-2.ll`5; the only difference being the branch target enforcement is enabled in the6; latter one.7 8; volatile int a, b, c, d, e;9;10; int y(int p) {11;   int r = (a + b) / (c + d) * e;12;   return r + 1;13; }14;15; int y(int p) {16;   int r = (a + b) / (c + d) * e;17;   return r + 2;18; }19 20@a = hidden global i32 0, align 421@b = hidden global i32 0, align 422@c = hidden global i32 0, align 423@d = hidden global i32 0, align 424@e = hidden global i32 0, align 425 26define hidden i32 @x(i32 %p) local_unnamed_addr #0 {27entry:28  %0 = load volatile i32, ptr @a, align 429  %1 = load volatile i32, ptr @b, align 430  %add = add nsw i32 %1, %031  %2 = load volatile i32, ptr @c, align 432  %3 = load volatile i32, ptr @d, align 433  %add1 = add nsw i32 %3, %234  %div = sdiv i32 %add, %add135  %4 = load volatile i32, ptr @e, align 436  %mul = mul nsw i32 %4, %div37  %add2 = add nsw i32 %mul, 138  ret i32 %add239}40; CHECK-LABEL: x:41; CHECK:       bl OUTLINED_FUNCTION_042 43define hidden i32 @y(i32 %p) local_unnamed_addr #0 {44entry:45  %0 = load volatile i32, ptr @a, align 446  %1 = load volatile i32, ptr @b, align 447  %add = add nsw i32 %1, %048  %2 = load volatile i32, ptr @c, align 449  %3 = load volatile i32, ptr @d, align 450  %add1 = add nsw i32 %3, %251  %div = sdiv i32 %add, %add152  %4 = load volatile i32, ptr @e, align 453  %mul = mul nsw i32 %4, %div54  %add2 = add nsw i32 %mul, 255  ret i32 %add256}57; CHECK-LABEL: y:58; CHECK:       bl OUTLINED_FUNCTION_059 60; CHECK-LABEL: OUTLINED_FUNCTION_0:61; CHECK-NOT:   bti62 63attributes #0 = { minsize nofree norecurse nounwind optsize  }64 65!llvm.module.flags = !{!0}66 67!0 = !{i32 8, !"branch-target-enforcement", i32 0}68