mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-02 08:46:23 +00:00
Revert r82404, it is causing a bootstrap miscompile. This is very very
scary, as it indicates a lurking bug. yay. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82411 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3711b7adcc
commit
66364346e0
@ -521,13 +521,6 @@ getNonLocalPointerDependency(Value *Pointer, bool isLoad, BasicBlock *FromBB,
|
|||||||
const Type *EltTy = cast<PointerType>(Pointer->getType())->getElementType();
|
const Type *EltTy = cast<PointerType>(Pointer->getType())->getElementType();
|
||||||
uint64_t PointeeSize = AA->getTypeStoreSize(EltTy);
|
uint64_t PointeeSize = AA->getTypeStoreSize(EltTy);
|
||||||
|
|
||||||
// If Pointer is a bitcast instruction, chomp through to the pointee since
|
|
||||||
// they are must alias. This increases the effectiveness of caching by
|
|
||||||
// finding more equivalences, avoids having to phi translate the bitcast, and
|
|
||||||
// avoids conflicts where we are looking for two "different" values in the
|
|
||||||
// same block when they are really just must aliases.
|
|
||||||
Pointer = Pointer->stripPointerCasts();
|
|
||||||
|
|
||||||
// This is the set of blocks we've inspected, and the pointer we consider in
|
// This is the set of blocks we've inspected, and the pointer we consider in
|
||||||
// each block. Because of critical edges, we currently bail out if querying
|
// each block. Because of critical edges, we currently bail out if querying
|
||||||
// a block with multiple different pointers. This can happen during PHI
|
// a block with multiple different pointers. This can happen during PHI
|
||||||
@ -667,6 +660,7 @@ getNonLocalPointerDepFromBB(Value *Pointer, uint64_t PointeeSize,
|
|||||||
SmallVectorImpl<NonLocalDepEntry> &Result,
|
SmallVectorImpl<NonLocalDepEntry> &Result,
|
||||||
DenseMap<BasicBlock*, Value*> &Visited,
|
DenseMap<BasicBlock*, Value*> &Visited,
|
||||||
bool SkipFirstBlock) {
|
bool SkipFirstBlock) {
|
||||||
|
|
||||||
// Look up the cached info for Pointer.
|
// Look up the cached info for Pointer.
|
||||||
ValueIsLoadPair CacheKey(Pointer, isLoad);
|
ValueIsLoadPair CacheKey(Pointer, isLoad);
|
||||||
|
|
||||||
@ -799,13 +793,6 @@ getNonLocalPointerDepFromBB(Value *Pointer, uint64_t PointeeSize,
|
|||||||
BasicBlock *Pred = *PI;
|
BasicBlock *Pred = *PI;
|
||||||
Value *PredPtr = PtrPHI->getIncomingValueForBlock(Pred);
|
Value *PredPtr = PtrPHI->getIncomingValueForBlock(Pred);
|
||||||
|
|
||||||
// If Pointer is a bitcast instruction, chomp through to the pointee since
|
|
||||||
// they are must alias. This increases the effectiveness of caching by
|
|
||||||
// finding more equivalences, avoids having to phi translate the bitcast, and
|
|
||||||
// avoids conflicts where we are looking for two "different" values in the
|
|
||||||
// same block when they are really just must aliases.
|
|
||||||
PredPtr = PredPtr->stripPointerCasts();
|
|
||||||
|
|
||||||
// Check to see if we have already visited this pred block with another
|
// Check to see if we have already visited this pred block with another
|
||||||
// pointer. If so, we can't do this lookup. This failure can occur
|
// pointer. If so, we can't do this lookup. This failure can occur
|
||||||
// with PHI translation when a critical edge exists and the PHI node in
|
// with PHI translation when a critical edge exists and the PHI node in
|
||||||
|
@ -141,32 +141,6 @@ Cont:
|
|||||||
; CHECK: ret i8 %A
|
; CHECK: ret i8 %A
|
||||||
}
|
}
|
||||||
|
|
||||||
;; non-local i32/float -> i8 load forwarding. This also tests that the "P3"
|
|
||||||
;; bitcast equivalence can be properly phi translated.
|
|
||||||
define i8 @coerce_mustalias_nonlocal1(i32* %P, i1 %cond) {
|
|
||||||
%P2 = bitcast i32* %P to float*
|
|
||||||
br i1 %cond, label %T, label %F
|
|
||||||
T:
|
|
||||||
store i32 42, i32* %P
|
|
||||||
br label %Cont
|
|
||||||
|
|
||||||
F:
|
|
||||||
store float 1.0, float* %P2
|
|
||||||
br label %Cont
|
|
||||||
|
|
||||||
Cont:
|
|
||||||
%P3 = bitcast i32* %P to i8*
|
|
||||||
%A = load i8* %P3
|
|
||||||
ret i8 %A
|
|
||||||
|
|
||||||
; CHECK: @coerce_mustalias_nonlocal1
|
|
||||||
; CHECK: Cont:
|
|
||||||
; CHECK: %A = phi i8 [
|
|
||||||
; CHECK-NOT: load
|
|
||||||
; CHECK: ret i8 %A
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
;; non-local i32 -> i8 partial redundancy load forwarding.
|
;; non-local i32 -> i8 partial redundancy load forwarding.
|
||||||
define i8 @coerce_mustalias_pre0(i32* %P, i1 %cond) {
|
define i8 @coerce_mustalias_pre0(i32* %P, i1 %cond) {
|
||||||
%P3 = bitcast i32* %P to i8*
|
%P3 = bitcast i32* %P to i8*
|
||||||
|
Loading…
Reference in New Issue
Block a user