164 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs2; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s3 4declare void @foo();5 6define void @atomicrmw_base(ptr %p) {7entry:8 %1 = atomicrmw add ptr %p, i32 1 acquire, align 89 call void @foo()10 ret void11}12 13define void @atomicrmw_copy(ptr %p) {14entry:15 %1 = atomicrmw add ptr %p, i32 1 acquire, align 816 call void @foo()17 ret void18}19 20define void @atomicrmw_wrong_type(ptr %p) {21entry:22 %1 = atomicrmw add ptr %p, i64 1 acquire, align 823 call void @foo()24 ret void25}26 27define void @atomicrmw_wrong_align(ptr %p) {28entry:29 %1 = atomicrmw add ptr %p, i32 1 acquire, align 430 call void @foo()31 ret void32}33 34define void @atomicrmw_wrong_volatile(ptr %p) {35entry:36 %1 = atomicrmw volatile add ptr %p, i32 1 acquire, align 837 call void @foo()38 ret void39}40 41define void @cmpxchg_base(ptr %p) {42entry:43 %1 = cmpxchg ptr %p, i32 0, i32 1 monotonic monotonic, align 844 call void @foo()45 ret void46}47 48define void @cmpxchg_copy(ptr %p) {49entry:50 %1 = cmpxchg ptr %p, i32 0, i32 1 monotonic monotonic, align 851 call void @foo()52 ret void53}54 55define void @cmpxchg_wrong_type(ptr %p) {56entry:57 %1 = cmpxchg ptr %p, i64 0, i64 1 monotonic monotonic, align 858 call void @foo()59 ret void60}61 62define void @cmpxchg_wrong_align(ptr %p) {63entry:64 %1 = cmpxchg ptr %p, i32 0, i32 1 monotonic monotonic, align 465 call void @foo()66 ret void67}68 69define void @cmpxchg_wrong_volatile(ptr %p) {70entry:71 %1 = cmpxchg volatile ptr %p, i32 0, i32 1 monotonic monotonic, align 872 call void @foo()73 ret void74}75 76 77; CHECK-LABEL: @atomicrmw_base(78; CHECK-NEXT: entry:79; CHECK-NEXT: call void @outlined_ir_func_1(ptr [[P:%.*]])80; CHECK-NEXT: ret void81;82;83; CHECK-LABEL: @atomicrmw_copy(84; CHECK-NEXT: entry:85; CHECK-NEXT: call void @outlined_ir_func_1(ptr [[P:%.*]])86; CHECK-NEXT: ret void87;88;89; CHECK-LABEL: @atomicrmw_wrong_type(90; CHECK-NEXT: entry:91; CHECK-NEXT: [[TMP0:%.*]] = atomicrmw add ptr [[P:%.*]], i64 1 acquire, align 892; CHECK-NEXT: call void @foo()93; CHECK-NEXT: ret void94;95;96; CHECK-LABEL: @atomicrmw_wrong_align(97; CHECK-NEXT: entry:98; CHECK-NEXT: [[TMP0:%.*]] = atomicrmw add ptr [[P:%.*]], i32 1 acquire, align 499; CHECK-NEXT: call void @foo()100; CHECK-NEXT: ret void101;102;103; CHECK-LABEL: @atomicrmw_wrong_volatile(104; CHECK-NEXT: entry:105; CHECK-NEXT: [[TMP0:%.*]] = atomicrmw volatile add ptr [[P:%.*]], i32 1 acquire, align 8106; CHECK-NEXT: call void @foo()107; CHECK-NEXT: ret void108;109;110; CHECK-LABEL: @cmpxchg_base(111; CHECK-NEXT: entry:112; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[P:%.*]])113; CHECK-NEXT: ret void114;115;116; CHECK-LABEL: @cmpxchg_copy(117; CHECK-NEXT: entry:118; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[P:%.*]])119; CHECK-NEXT: ret void120;121;122; CHECK-LABEL: @cmpxchg_wrong_type(123; CHECK-NEXT: entry:124; CHECK-NEXT: [[TMP0:%.*]] = cmpxchg ptr [[P:%.*]], i64 0, i64 1 monotonic monotonic, align 8125; CHECK-NEXT: call void @foo()126; CHECK-NEXT: ret void127;128;129; CHECK-LABEL: @cmpxchg_wrong_align(130; CHECK-NEXT: entry:131; CHECK-NEXT: [[TMP0:%.*]] = cmpxchg ptr [[P:%.*]], i32 0, i32 1 monotonic monotonic, align 4132; CHECK-NEXT: call void @foo()133; CHECK-NEXT: ret void134;135;136; CHECK-LABEL: @cmpxchg_wrong_volatile(137; CHECK-NEXT: entry:138; CHECK-NEXT: [[TMP0:%.*]] = cmpxchg volatile ptr [[P:%.*]], i32 0, i32 1 monotonic monotonic, align 8139; CHECK-NEXT: call void @foo()140; CHECK-NEXT: ret void141;142;143; CHECK-LABEL: @outlined_ir_func_0(144; CHECK-NEXT: newFuncRoot:145; CHECK-NEXT: br label [[ENTRY_TO_OUTLINE:%.*]]146; CHECK: entry_to_outline:147; CHECK-NEXT: [[TMP1:%.*]] = cmpxchg ptr [[TMP0:%.*]], i32 0, i32 1 monotonic monotonic, align 8148; CHECK-NEXT: call void @foo()149; CHECK-NEXT: br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]]150; CHECK: entry_after_outline.exitStub:151; CHECK-NEXT: ret void152;153;154; CHECK-LABEL: @outlined_ir_func_1(155; CHECK-NEXT: newFuncRoot:156; CHECK-NEXT: br label [[ENTRY_TO_OUTLINE:%.*]]157; CHECK: entry_to_outline:158; CHECK-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[TMP0:%.*]], i32 1 acquire, align 8159; CHECK-NEXT: call void @foo()160; CHECK-NEXT: br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]]161; CHECK: entry_after_outline.exitStub:162; CHECK-NEXT: ret void163;164