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