65 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s3 4; This test checks that we do not outline callbr instruction since as we do not5; outline any control flow change instructions.6 7 8define i32 @function1(i32 %a, i32 %b) {9; CHECK-LABEL: @function1(10; CHECK-NEXT: bb0:11; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[A:%.*]], 412; CHECK-NEXT: call void @outlined_ir_func_0(i32 [[B:%.*]])13; CHECK-NEXT: callbr void asm "xorl $0, $014; CHECK-NEXT: to label [[NORMAL:%.*]] [label %fail1]15; CHECK: normal:16; CHECK-NEXT: call void @outlined_ir_func_0(i32 [[B]])17; CHECK-NEXT: ret i32 018; CHECK: fail1:19; CHECK-NEXT: call void @outlined_ir_func_0(i32 [[B]])20; CHECK-NEXT: ret i32 021;22bb0:23 %0 = add i32 %a, 424 %1 = add i32 %b, 125 %2 = add i32 %b, 126 callbr void asm "xorl $0, $0; jmp ${1:l}", "r,!i,~{dirflag},~{fpsr},~{flags}"(i32 %0) to label %normal [label %fail1]27normal:28 %3 = add i32 %b, 129 %4 = add i32 %b, 130 ret i32 031fail1:32 %5 = add i32 %b, 133 %6 = add i32 %b, 134 ret i32 035}36 37define i32 @function2(i32 %a, i32 %b) {38; CHECK-LABEL: @function2(39; CHECK-NEXT: bb0:40; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[A:%.*]], 441; CHECK-NEXT: call void @outlined_ir_func_0(i32 [[B:%.*]])42; CHECK-NEXT: callbr void asm "xorl $0, $043; CHECK-NEXT: to label [[NORMAL:%.*]] [label %fail1]44; CHECK: normal:45; CHECK-NEXT: call void @outlined_ir_func_0(i32 [[B]])46; CHECK-NEXT: ret i32 047; CHECK: fail1:48; CHECK-NEXT: call void @outlined_ir_func_0(i32 [[B]])49; CHECK-NEXT: ret i32 050;51bb0:52 %0 = add i32 %a, 453 %1 = add i32 %b, 154 %2 = add i32 %b, 155 callbr void asm "xorl $0, $0; jmp ${1:l}", "r,!i,~{dirflag},~{fpsr},~{flags}"(i32 %0) to label %normal [label %fail1]56normal:57 %3 = add i32 %b, 158 %4 = add i32 %b, 159 ret i32 060fail1:61 %5 = add i32 %b, 162 %6 = add i32 %b, 163 ret i32 064}65