summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/MergeFunc/ranges.ll
diff options
context:
space:
mode:
authorStepan Dyatkovskiy <stpworld@narod.ru>2014-06-20 19:11:56 +0000
committerStepan Dyatkovskiy <stpworld@narod.ru>2014-06-20 19:11:56 +0000
commit6baeb8805cd69638ae7c5882826c15a1394a3b79 (patch)
treef9be5d29c8b8209cd68448b59d7dc853b65a94aa /llvm/test/Transforms/MergeFunc/ranges.ll
parentf67d999ebb3c2c0e5ec00b73ef7907954ae13ced (diff)
downloadbcm5719-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.ll43
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}
OpenPOWER on IntegriCloud