mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Revert the addition of hasNoPointerOverflow to GEPOperator.
Getelementptrs that are defined to wrap are virtually useless to optimization, and getelementptrs that are undefined on any kind of overflow are too restrictive -- it's difficult to ensure that all intermediate addresses are within bounds. I'm going to take a different approach. Remove a few optimizations that depended on this flag. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76437 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -22,58 +22,6 @@ return: ; preds = %bb2
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @bar(i8* %str1Ptr, i64 %s, i8* %inLastBytePtr) nounwind {
|
||||
entry:
|
||||
%str2Ptr = inttoptr i64 %s to i8*
|
||||
%0 = icmp ult i8* %str2Ptr, %str1Ptr ; <i1> [#uses=1]
|
||||
%str2Ptr_addr.0 = select i1 %0, i8* %str1Ptr, i8* %str2Ptr ; <i8*> [#uses=1]
|
||||
br label %bb2
|
||||
|
||||
bb2: ; preds = %bb2, %entry
|
||||
%str2Ptr_addr.1 = phi i8* [ %str2Ptr_addr.0, %entry ], [ %1, %bb2 ] ; <i8*> [#uses=1]
|
||||
%1 = getelementptr i8* %str2Ptr_addr.1, i64 1 ; <i8*> [#uses=2]
|
||||
%2 = icmp ult i8* %1, %inLastBytePtr ; <i1> [#uses=0]
|
||||
br i1 false, label %bb2, label %return
|
||||
|
||||
return: ; preds = %bb2
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @qux(i64 %t, i64 %s, i8* %inLastBytePtr) nounwind {
|
||||
entry:
|
||||
%str1Ptr = inttoptr i64 %t to i8*
|
||||
%str2Ptr = inttoptr i64 %s to i8*
|
||||
%0 = icmp ult i8* %str2Ptr, %str1Ptr ; <i1> [#uses=1]
|
||||
%str2Ptr_addr.0 = select i1 %0, i8* %str1Ptr, i8* %str2Ptr ; <i8*> [#uses=1]
|
||||
br label %bb2
|
||||
|
||||
bb2: ; preds = %bb2, %entry
|
||||
%str2Ptr_addr.1 = phi i8* [ %str2Ptr_addr.0, %entry ], [ %1, %bb2 ] ; <i8*> [#uses=1]
|
||||
%1 = getelementptr i8* %str2Ptr_addr.1, i64 1 ; <i8*> [#uses=2]
|
||||
%2 = icmp ult i8* %1, %inLastBytePtr ; <i1> [#uses=0]
|
||||
br i1 false, label %bb2, label %return
|
||||
|
||||
return: ; preds = %bb2
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @vor(i64 %t, i8* %str2Ptr, i8* %inLastBytePtr) nounwind {
|
||||
entry:
|
||||
%str1Ptr = inttoptr i64 %t to i8*
|
||||
%0 = icmp ult i8* %str2Ptr, %str1Ptr ; <i1> [#uses=1]
|
||||
%str2Ptr_addr.0 = select i1 %0, i8* %str1Ptr, i8* %str2Ptr ; <i8*> [#uses=1]
|
||||
br label %bb2
|
||||
|
||||
bb2: ; preds = %bb2, %entry
|
||||
%str2Ptr_addr.1 = phi i8* [ %str2Ptr_addr.0, %entry ], [ %1, %bb2 ] ; <i8*> [#uses=1]
|
||||
%1 = getelementptr i8* %str2Ptr_addr.1, i64 1 ; <i8*> [#uses=2]
|
||||
%2 = icmp ult i8* %1, %inLastBytePtr ; <i1> [#uses=0]
|
||||
br i1 false, label %bb2, label %return
|
||||
|
||||
return: ; preds = %bb2
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @sfoo(i8* %str1Ptr, i8* %str2Ptr, i8* %inLastBytePtr) nounwind {
|
||||
entry:
|
||||
%0 = icmp slt i8* %str2Ptr, %str1Ptr ; <i1> [#uses=1]
|
||||
@@ -89,57 +37,3 @@ bb2: ; preds = %bb2, %entry
|
||||
return: ; preds = %bb2
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @sbar(i8* %str1Ptr, i64 %s, i8* %inLastBytePtr) nounwind {
|
||||
entry:
|
||||
%str2Ptr = inttoptr i64 %s to i8*
|
||||
%0 = icmp slt i8* %str2Ptr, %str1Ptr ; <i1> [#uses=1]
|
||||
%str2Ptr_addr.0 = select i1 %0, i8* %str1Ptr, i8* %str2Ptr ; <i8*> [#uses=1]
|
||||
br label %bb2
|
||||
|
||||
bb2: ; preds = %bb2, %entry
|
||||
%str2Ptr_addr.1 = phi i8* [ %str2Ptr_addr.0, %entry ], [ %1, %bb2 ] ; <i8*> [#uses=1]
|
||||
%1 = getelementptr i8* %str2Ptr_addr.1, i64 1 ; <i8*> [#uses=2]
|
||||
%2 = icmp slt i8* %1, %inLastBytePtr ; <i1> [#uses=0]
|
||||
br i1 false, label %bb2, label %return
|
||||
|
||||
return: ; preds = %bb2
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @squx(i64 %t, i64 %s, i8* %inLastBytePtr) nounwind {
|
||||
entry:
|
||||
%str1Ptr = inttoptr i64 %t to i8*
|
||||
%str2Ptr = inttoptr i64 %s to i8*
|
||||
%0 = icmp slt i8* %str2Ptr, %str1Ptr ; <i1> [#uses=1]
|
||||
%str2Ptr_addr.0 = select i1 %0, i8* %str1Ptr, i8* %str2Ptr ; <i8*> [#uses=1]
|
||||
br label %bb2
|
||||
|
||||
bb2: ; preds = %bb2, %entry
|
||||
%str2Ptr_addr.1 = phi i8* [ %str2Ptr_addr.0, %entry ], [ %1, %bb2 ] ; <i8*> [#uses=1]
|
||||
%1 = getelementptr i8* %str2Ptr_addr.1, i64 1 ; <i8*> [#uses=2]
|
||||
%2 = icmp slt i8* %1, %inLastBytePtr ; <i1> [#uses=0]
|
||||
br i1 false, label %bb2, label %return
|
||||
|
||||
return: ; preds = %bb2
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @svor(i64 %t, i8* %str2Ptr, i8* %inLastBytePtr) nounwind {
|
||||
entry:
|
||||
%str1Ptr = inttoptr i64 %t to i8*
|
||||
%0 = icmp slt i8* %str2Ptr, %str1Ptr ; <i1> [#uses=1]
|
||||
%str2Ptr_addr.0 = select i1 %0, i8* %str1Ptr, i8* %str2Ptr ; <i8*> [#uses=1]
|
||||
br label %bb2
|
||||
|
||||
bb2: ; preds = %bb2, %entry
|
||||
%str2Ptr_addr.1 = phi i8* [ %str2Ptr_addr.0, %entry ], [ %1, %bb2 ] ; <i8*> [#uses=1]
|
||||
%1 = getelementptr i8* %str2Ptr_addr.1, i64 1 ; <i8*> [#uses=2]
|
||||
%2 = icmp slt i8* %1, %inLastBytePtr ; <i1> [#uses=0]
|
||||
br i1 false, label %bb2, label %return
|
||||
|
||||
return: ; preds = %bb2
|
||||
ret void
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user