diff options
author | Dan Gohman <gohman@apple.com> | 2010-07-14 17:25:37 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-07-14 17:25:37 +0000 |
commit | 2dd50e656f048d222aaaa57168688326fa52421b (patch) | |
tree | 1d613b7b7658bc18d90d63a54d923fd6a9616052 | |
parent | 7a52e65ca6233811ef8d7ab4c4eb46ae4feabfc5 (diff) | |
download | external_llvm-2dd50e656f048d222aaaa57168688326fa52421b.zip external_llvm-2dd50e656f048d222aaaa57168688326fa52421b.tar.gz external_llvm-2dd50e656f048d222aaaa57168688326fa52421b.tar.bz2 |
Delete fast-isel's trivial load optimization; it breaks debugging because
it can look past points where a debugger might modify user variables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108336 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/FastISel.h | 2 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/FastISel.cpp | 31 | ||||
-rw-r--r-- | test/CodeGen/X86/fast-isel-loads.ll | 23 |
3 files changed, 0 insertions, 56 deletions
diff --git a/include/llvm/CodeGen/FastISel.h b/include/llvm/CodeGen/FastISel.h index 7c57648..79b1554 100644 --- a/include/llvm/CodeGen/FastISel.h +++ b/include/llvm/CodeGen/FastISel.h @@ -307,8 +307,6 @@ protected: } private: - bool SelectLoad(const User *I); - bool SelectBinaryOp(const User *I, unsigned ISDOpcode); bool SelectFNeg(const User *I); diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp index bd49c17..6c13f27 100644 --- a/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -782,39 +782,8 @@ FastISel::SelectFNeg(const User *I) { } bool -FastISel::SelectLoad(const User *I) { - LoadInst *LI = const_cast<LoadInst *>(cast<LoadInst>(I)); - - // For a load from an alloca, make a limited effort to find the value - // already available in a register, avoiding redundant loads. - if (!LI->isVolatile() && isa<AllocaInst>(LI->getPointerOperand())) { - BasicBlock::iterator ScanFrom = LI; - if (const Value *V = FindAvailableLoadedValue(LI->getPointerOperand(), - LI->getParent(), ScanFrom)) { - if (!V->use_empty() && - (!isa<Instruction>(V) || - cast<Instruction>(V)->getParent() == LI->getParent() || - (isa<AllocaInst>(V) && - FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(V)))) && - (!isa<Argument>(V) || - LI->getParent() == &LI->getParent()->getParent()->getEntryBlock())) { - unsigned ResultReg = getRegForValue(V); - if (ResultReg != 0) { - UpdateValueMap(I, ResultReg); - return true; - } - } - } - } - - return false; -} - -bool FastISel::SelectOperator(const User *I, unsigned Opcode) { switch (Opcode) { - case Instruction::Load: - return SelectLoad(I); case Instruction::Add: return SelectBinaryOp(I, ISD::ADD); case Instruction::FAdd: diff --git a/test/CodeGen/X86/fast-isel-loads.ll b/test/CodeGen/X86/fast-isel-loads.ll deleted file mode 100644 index 2fbb46c..0000000 --- a/test/CodeGen/X86/fast-isel-loads.ll +++ /dev/null @@ -1,23 +0,0 @@ -; RUN: llc -march=x86-64 -O0 -asm-verbose=false < %s | FileCheck %s - -; Fast-isel shouldn't reload the argument values from the stack. - -; CHECK: foo: -; CHECK-NEXT: movq %rdi, -8(%rsp) -; CHECK-NEXT: movq %rsi, -16(%rsp) -; CHECK-NEXT: movsd 128(%rsi,%rdi,8), %xmm0 -; CHECK-NEXT: ret - -define double @foo(i64 %x, double* %p) nounwind { -entry: - %x.addr = alloca i64, align 8 ; <i64*> [#uses=2] - %p.addr = alloca double*, align 8 ; <double**> [#uses=2] - store i64 %x, i64* %x.addr - store double* %p, double** %p.addr - %tmp = load i64* %x.addr ; <i64> [#uses=1] - %tmp1 = load double** %p.addr ; <double*> [#uses=1] - %add = add nsw i64 %tmp, 16 ; <i64> [#uses=1] - %arrayidx = getelementptr inbounds double* %tmp1, i64 %add ; <double*> [#uses=1] - %tmp2 = load double* %arrayidx ; <double> [#uses=1] - ret double %tmp2 -} |