diff options
| author | Piotr Padlewski <piotr.padlewski@gmail.com> | 2018-05-18 23:52:57 +0000 |
|---|---|---|
| committer | Piotr Padlewski <piotr.padlewski@gmail.com> | 2018-05-18 23:52:57 +0000 |
| commit | a26a08cb52d4dd7fe69312930da01e1c55b91036 (patch) | |
| tree | f3d16fcd266f7bb0ecd527883aece83ed47dc735 /llvm/test/Transforms/InstCombine/invariant.group.ll | |
| parent | dbb6f8a8179b0604e25707b5c1b72be6164f62d9 (diff) | |
| download | bcm5719-llvm-a26a08cb52d4dd7fe69312930da01e1c55b91036.tar.gz bcm5719-llvm-a26a08cb52d4dd7fe69312930da01e1c55b91036.zip | |
Constant fold launder of null and undef
Summary:
This might be useful because clang will add
some barriers for pointer comparisons.
Reviewers: majnemer, dberlin, hfinkel, nlewycky, davide, rsmith, amharc,
kuhar
Subscribers: davide, amharc, llvm-commits
Differential Revision: https://reviews.llvm.org/D32423
llvm-svn: 332786
Diffstat (limited to 'llvm/test/Transforms/InstCombine/invariant.group.ll')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/invariant.group.ll | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/invariant.group.ll b/llvm/test/Transforms/InstCombine/invariant.group.ll new file mode 100644 index 00000000000..697ed5995c7 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/invariant.group.ll @@ -0,0 +1,34 @@ +; RUN: opt -instcombine -S < %s | FileCheck %s + +; CHECK-LABEL: define i8* @simplifyNullLaunder() +define i8* @simplifyNullLaunder() { +; CHECK-NEXT: ret i8* null + %b2 = call i8* @llvm.launder.invariant.group.p0i8(i8* null) + ret i8* %b2 +} + +; CHECK-LABEL: define i8 addrspace(42)* @dontsimplifyNullLaunderForDifferentAddrspace() +define i8 addrspace(42)* @dontsimplifyNullLaunderForDifferentAddrspace() { +; CHECK: %b2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* null) +; CHECK: ret i8 addrspace(42)* %b2 + %b2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* null) + ret i8 addrspace(42)* %b2 +} + +; CHECK-LABEL: define i8* @simplifyUndefLaunder() +define i8* @simplifyUndefLaunder() { +; CHECK-NEXT: ret i8* undef + %b2 = call i8* @llvm.launder.invariant.group.p0i8(i8* undef) + ret i8* %b2 +} + +; CHECK-LABEL: define i8 addrspace(42)* @simplifyUndefLaunder2() +define i8 addrspace(42)* @simplifyUndefLaunder2() { +; CHECK-NEXT: ret i8 addrspace(42)* undef + %b2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* undef) + ret i8 addrspace(42)* %b2 +} + + +declare i8* @llvm.launder.invariant.group.p0i8(i8*) +declare i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)*) |

