mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
9b141122e2
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
44 lines
1.1 KiB
LLVM
44 lines
1.1 KiB
LLVM
; 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}
|