diff options
Diffstat (limited to 'llvm/test/Transforms/NewGVN/int_sideeffect.ll')
| -rw-r--r-- | llvm/test/Transforms/NewGVN/int_sideeffect.ll | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/Transforms/NewGVN/int_sideeffect.ll b/llvm/test/Transforms/NewGVN/int_sideeffect.ll new file mode 100644 index 00000000000..75a798d6f0a --- /dev/null +++ b/llvm/test/Transforms/NewGVN/int_sideeffect.ll @@ -0,0 +1,27 @@ +; RUN: opt -S < %s -newgvn | FileCheck %s + +declare void @llvm.sideeffect() + +; Store-to-load forwarding across a @llvm.sideeffect. + +; CHECK-LABEL: s2l +; CHECK-NOT: load +define float @s2l(float* %p) { + store float 0.0, float* %p + call void @llvm.sideeffect() + %t = load float, float* %p + ret float %t +} + +; Redundant load elimination across a @llvm.sideeffect. + +; CHECK-LABEL: rle +; CHECK: load +; CHECK-NOT: load +define float @rle(float* %p) { + %r = load float, float* %p + call void @llvm.sideeffect() + %s = load float, float* %p + %t = fadd float %r, %s + ret float %t +} |

