This patch fixes PR37526 by simplifying the newly generated LoadInst
instructions. If the pointer address is a bitcast from the pointer to
the NewType, we can just remove this extra bitcast instead of creating
the new one. This fixes the PR37526 + may speed up the whole compilation
process.
Details
Details
Diff Detail
Diff Detail
- Repository
- rL LLVM
Event Timeline
lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp | ||
---|---|---|
467 ↗ | (On Diff #147788) | NewPtr = Op0 ? |
lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp | ||
---|---|---|
462–467 ↗ | (On Diff #147789) | Use a matcher to simplify this? Value *NewPtr; if (!(match(Ptr, m_BitCast(m_Value(NewPtr))) && NewPtr->getType()->getPointerElementType() == NewTy && NewPtr->getType()->getPointerAddressSpace() == AS)) NewPtr = IC.Builder.CreateBitCast(Ptr, NewTy->getPointerTo(AS)); |
test/Transforms/InstCombine/PR37526.ll | ||
4–6 ↗ | (On Diff #147789) | We shouldn't need a struct or loop to repro - something like this should be ok? define void @PR37526(i32* %pz, i32* %px, i32* %py) { %t1 = bitcast i32* %pz to i64* %t2 = load i32, i32* %py %t3 = load i32, i32* %px %cmp = icmp slt i32 %t2, %t3 %select = select i1 %cmp, i32* %px, i32* %py %bc = bitcast i32* %select to i64* %r = load i64, i64* %bc store i64 %r, i64* %t1 ret void } |