forked from OSchip/llvm-project
[LoadCombine] Fix combining of loads which span an aliasing store.
Fixes PR31517 Differential Revision: https://reviews.llvm.org/D28922 llvm-svn: 294632
This commit is contained in:
parent
857aba4410
commit
714d9d22ad
|
@ -245,13 +245,17 @@ bool LoadCombine::runOnBasicBlock(BasicBlock &BB) {
|
||||||
bool Combined = false;
|
bool Combined = false;
|
||||||
unsigned Index = 0;
|
unsigned Index = 0;
|
||||||
for (auto &I : BB) {
|
for (auto &I : BB) {
|
||||||
if (I.mayThrow() || (I.mayWriteToMemory() && AST.containsUnknown(&I))) {
|
if (I.mayThrow() || AST.containsUnknown(&I)) {
|
||||||
if (combineLoads(LoadMap))
|
if (combineLoads(LoadMap))
|
||||||
Combined = true;
|
Combined = true;
|
||||||
LoadMap.clear();
|
LoadMap.clear();
|
||||||
AST.clear();
|
AST.clear();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (I.mayWriteToMemory()) {
|
||||||
|
AST.add(&I);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
LoadInst *LI = dyn_cast<LoadInst>(&I);
|
LoadInst *LI = dyn_cast<LoadInst>(&I);
|
||||||
if (!LI)
|
if (!LI)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -37,3 +37,24 @@ define i64 @test2(i32* nocapture readonly %a, i32* nocapture readonly %b) {
|
||||||
ret i64 %add
|
ret i64 %add
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%rec11 = type { i16, i16, i16 }
|
||||||
|
@str = global %rec11 { i16 1, i16 2, i16 3 }
|
||||||
|
|
||||||
|
; PR31517 - Check that loads which span an aliasing store are not combined.
|
||||||
|
define i16 @test3() {
|
||||||
|
; CHECK-LABEL: @test3
|
||||||
|
|
||||||
|
; CHECK: load i16, i16*
|
||||||
|
; CHECK: store i16
|
||||||
|
; CHECK: ret i16
|
||||||
|
|
||||||
|
%_tmp9 = getelementptr %rec11, %rec11* @str, i16 0, i32 1
|
||||||
|
%_tmp10 = load i16, i16* %_tmp9
|
||||||
|
%_tmp12 = getelementptr %rec11, %rec11* @str, i16 0, i32 0
|
||||||
|
store i16 %_tmp10, i16* %_tmp12
|
||||||
|
%_tmp13 = getelementptr %rec11, %rec11* @str, i16 0, i32 0
|
||||||
|
%_tmp14 = load i16, i16* %_tmp13
|
||||||
|
%_tmp15 = icmp eq i16 %_tmp14, 3
|
||||||
|
%_tmp16 = select i1 %_tmp15, i16 1, i16 0
|
||||||
|
ret i16 %_tmp16
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue