diff options
| author | Stepan Dyatkovskiy <stpworld@narod.ru> | 2014-06-20 19:11:56 +0000 |
|---|---|---|
| committer | Stepan Dyatkovskiy <stpworld@narod.ru> | 2014-06-20 19:11:56 +0000 |
| commit | 6baeb8805cd69638ae7c5882826c15a1394a3b79 (patch) | |
| tree | f9be5d29c8b8209cd68448b59d7dc853b65a94aa /llvm/test/Transforms/MergeFunc/ranges.ll | |
| parent | f67d999ebb3c2c0e5ec00b73ef7907954ae13ced (diff) | |
| download | bcm5719-llvm-6baeb8805cd69638ae7c5882826c15a1394a3b79.tar.gz bcm5719-llvm-6baeb8805cd69638ae7c5882826c15a1394a3b79.zip | |
Commited patch from Björn Steinbrink:
Summary:
Different range metadata can lead to different optimizations in later
passes, possibly breaking the semantics of the merged function. So range
metadata must be taken into consideration when comparing Load
instructions.
Thanks!
llvm-svn: 211391
Diffstat (limited to 'llvm/test/Transforms/MergeFunc/ranges.ll')
| -rw-r--r-- | llvm/test/Transforms/MergeFunc/ranges.ll | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/llvm/test/Transforms/MergeFunc/ranges.ll b/llvm/test/Transforms/MergeFunc/ranges.ll new file mode 100644 index 00000000000..e25ff1d3acb --- /dev/null +++ b/llvm/test/Transforms/MergeFunc/ranges.ll @@ -0,0 +1,43 @@ +; RUN: opt -mergefunc -S < %s | FileCheck %s +define i1 @cmp_with_range(i8*, i8*) { + %v1 = load i8* %0, !range !0 + %v2 = load i8* %1, !range !0 + %out = icmp eq i8 %v1, %v2 + ret i1 %out +} + +define i1 @cmp_no_range(i8*, i8*) { +; CHECK-LABEL: @cmp_no_range +; CHECK-NEXT %v1 = load i8* %0 +; CHECK-NEXT %v2 = load i8* %1 +; CHECK-NEXT %out = icmp eq i8 %v1, %v2 +; CHECK-NEXT ret i1 %out + %v1 = load i8* %0 + %v2 = load i8* %1 + %out = icmp eq i8 %v1, %v2 + ret i1 %out +} + +define i1 @cmp_different_range(i8*, i8*) { +; CHECK-LABEL: @cmp_different_range +; CHECK-NEXT: %v1 = load i8* %0, !range !1 +; CHECK-NEXT: %v2 = load i8* %1, !range !1 +; CHECK-NEXT: %out = icmp eq i8 %v1, %v2 +; CHECK-NEXT: ret i1 %out + %v1 = load i8* %0, !range !1 + %v2 = load i8* %1, !range !1 + %out = icmp eq i8 %v1, %v2 + ret i1 %out +} + +define i1 @cmp_with_same_range(i8*, i8*) { +; CHECK-LABEL: @cmp_with_same_range +; CHECK: tail call i1 @cmp_with_range + %v1 = load i8* %0, !range !0 + %v2 = load i8* %1, !range !0 + %out = icmp eq i8 %v1, %v2 + ret i1 %out +} + +!0 = metadata !{i8 0, i8 2} +!1 = metadata !{i8 5, i8 7} |

