summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-07-25 00:55:17 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-07-25 00:55:17 +0000
commitc90a11256e8e2cb7519588c82e4a2ab3658bdd0f (patch)
treec93b364bc2590da70e455aadec1b5db75d14bd12
parent2a343479f2b98ee4f826a5500ebeca1ee2b42e16 (diff)
downloadbcm5719-llvm-c90a11256e8e2cb7519588c82e4a2ab3658bdd0f.tar.gz
bcm5719-llvm-c90a11256e8e2cb7519588c82e4a2ab3658bdd0f.zip
Teach ARM isLegalAddressingMode to handle unknown type without crashing. This fixes pr2589.
llvm-svn: 54004
-rw-r--r--llvm/lib/Target/ARM/ARMISelLowering.cpp2
-rw-r--r--llvm/test/CodeGen/ARM/2008-07-24-CodeGenPrepCrash.ll9
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index 15c225aebe7..afc7ebc4c91 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -1598,7 +1598,7 @@ static bool isLegalAddressImmediate(int64_t V, MVT VT,
/// by AM is legal for this target, for a load/store of the specified type.
bool ARMTargetLowering::isLegalAddressingMode(const AddrMode &AM,
const Type *Ty) const {
- if (!isLegalAddressImmediate(AM.BaseOffs, getValueType(Ty), Subtarget))
+ if (!isLegalAddressImmediate(AM.BaseOffs, getValueType(Ty, true), Subtarget))
return false;
// Can never fold addr of global into load/store.
diff --git a/llvm/test/CodeGen/ARM/2008-07-24-CodeGenPrepCrash.ll b/llvm/test/CodeGen/ARM/2008-07-24-CodeGenPrepCrash.ll
new file mode 100644
index 00000000000..6ea75eb5c79
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/2008-07-24-CodeGenPrepCrash.ll
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc -march=arm
+; PR2589
+
+define void @main({ i32 }*) {
+entry:
+ %sret1 = alloca { i32 } ; <{ i32 }*> [#uses=1]
+ load { i32 }* %sret1 ; <{ i32 }>:1 [#uses=0]
+ ret void
+}
OpenPOWER on IntegriCloud