136 lines · plain
1; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=volatile --test FileCheck --test-arg --check-prefixes=INTERESTING,CHECK --test-arg %s --test-arg --input-file %s -o %t2; RUN: FileCheck -check-prefixes=RESULT,CHECK %s < %t3 4; CHECK-LABEL: @load_volatile_keep(5; INTERESTING: load volatile6; RESULT: %op = load volatile i32,7define i32 @load_volatile_keep(ptr %ptr) {8 %op = load volatile i32, ptr %ptr9 ret i32 %op10}11 12; CHECK-LABEL: @load_volatile_drop(13; INTERESTING: load14; RESULT: %op = load i32,15define i32 @load_volatile_drop(ptr %ptr) {16 %op = load volatile i32, ptr %ptr17 ret i32 %op18}19 20; CHECK-LABEL: @store_volatile_keep(21; INTERESTING: store volatile22; RESULT: store volatile i32 0,23define void @store_volatile_keep(ptr %ptr) {24 store volatile i32 0, ptr %ptr25 ret void26}27 28; CHECK-LABEL: @store_volatile_drop(29; INTERESTING: store30; RESULT: store i32 0,31define void @store_volatile_drop(ptr %ptr) {32 store volatile i32 0, ptr %ptr33 ret void34}35 36; CHECK-LABEL: @atomicrmw_volatile_keep(37; INTERESTING: atomicrmw volatile38; RESULT: atomicrmw volatile add ptr %ptr39define i32 @atomicrmw_volatile_keep(ptr %ptr) {40 %val = atomicrmw volatile add ptr %ptr, i32 3 seq_cst41 ret i32 %val42}43 44; CHECK-LABEL: @atomicrmw_volatile_drop(45; INTERESTING: atomicrmw46; RESULT: atomicrmw add ptr %ptr47define i32 @atomicrmw_volatile_drop(ptr %ptr) {48 %val = atomicrmw volatile add ptr %ptr, i32 3 seq_cst49 ret i32 %val50}51 52; CHECK-LABEL: @cmpxchg_volatile_keep(53; INTERESTING: cmpxchg volatile54; RESULT: cmpxchg volatile ptr %ptr, i32 %old, i32 %in seq_cst seq_cst55define { i32, i1 } @cmpxchg_volatile_keep(ptr %ptr, i32 %old, i32 %in) {56 %val = cmpxchg volatile ptr %ptr, i32 %old, i32 %in seq_cst seq_cst57 ret { i32, i1 } %val58}59 60; CHECK-LABEL: @cmpxchg_volatile_drop(61; INTERESTING: cmpxchg62; RESULT: cmpxchg ptr %ptr, i32 %old, i32 %in seq_cst seq_cst63define { i32, i1 } @cmpxchg_volatile_drop(ptr %ptr, i32 %old, i32 %in) {64 %val = cmpxchg volatile ptr %ptr, i32 %old, i32 %in seq_cst seq_cst65 ret { i32, i1 } %val66}67 68; CHECK-LABEL: @memcpy_volatile_keep(69; INTERESTING: i1 true70; RESULT: call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %size, i1 true)71define void @memcpy_volatile_keep(ptr %dst, ptr %src, i64 %size) {72 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %size, i1 true)73 ret void74}75 76; CHECK-LABEL: @memcpy_volatile_drop(77; INTERESTING: llvm.memcpy78; RESULT: call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %size, i1 false)79define void @memcpy_volatile_drop(ptr %dst, ptr %src, i64 %size) {80 call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %size, i1 true)81 ret void82}83 84; CHECK-LABEL: @memcpy_inline_volatile_keep(85; INTERESTING: i1 true86; RESULT: call void @llvm.memcpy.inline.p0.p0.i64(ptr %dst, ptr %src, i64 256, i1 true)87define void @memcpy_inline_volatile_keep(ptr %dst, ptr %src) {88 call void @llvm.memcpy.inline.p0.p0.i64(ptr %dst, ptr %src, i64 256, i1 true)89 ret void90}91 92; CHECK-LABEL: @memcpy_inline_volatile_drop(93; INTERESTING: llvm.memcpy94; RESULT: call void @llvm.memcpy.inline.p0.p0.i64(ptr %dst, ptr %src, i64 256, i1 false)95define void @memcpy_inline_volatile_drop(ptr %dst, ptr %src) {96 call void @llvm.memcpy.inline.p0.p0.i64(ptr %dst, ptr %src, i64 256, i1 true)97 ret void98}99 100; CHECK-LABEL: @memmove_volatile_keep(101; INTERESTING: i1 true102; RESULT: call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 256, i1 true)103define void @memmove_volatile_keep(ptr %dst, ptr %src) {104 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 256, i1 true)105 ret void106}107 108; CHECK-LABEL: @memmove_volatile_drop(109; INTERESTING: llvm.memmove110; RESULT: call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %size, i1 false)111define void @memmove_volatile_drop(ptr %dst, ptr %src, i64 %size) {112 call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 %size, i1 true)113 ret void114}115 116; CHECK-LABEL: @memset_volatile_keep(117; INTERESTING: i1 true118; RESULT: call void @llvm.memset.p0.i64(ptr %ptr, i8 %val, i64 %size, i1 true)119define void @memset_volatile_keep(ptr %ptr, i8 %val, i64 %size) {120 call void @llvm.memset.p0.i64(ptr %ptr, i8 %val, i64 %size, i1 true)121 ret void122}123 124; CHECK-LABEL: @memset_volatile_drop(125; INTERESTING: llvm.memset126; RESULT: call void @llvm.memset.p0.i64(ptr %ptr, i8 %val, i64 %size, i1 false)127define void @memset_volatile_drop(ptr %ptr, i8 %val, i64 %size) {128 call void @llvm.memset.p0.i64(ptr %ptr, i8 %val, i64 %size, i1 true)129 ret void130}131 132declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)133declare void @llvm.memmove.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)134declare void @llvm.memcpy.inline.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64 immarg, i1 immarg)135declare void @llvm.memset.p0.i64(ptr noalias nocapture readonly, i8, i64, i1 immarg)136