summaryrefslogtreecommitdiff
path: root/lib/Target/ARM/ARMISelLowering.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-04-01 08:06:46 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-04-01 08:06:46 +0000
commit3074d9df96b1b5fa3920672ef7555d3fbbc5bb65 (patch)
treefd7426ae2fda76bb0d3aaedf17a99428d5de75d8 /lib/Target/ARM/ARMISelLowering.cpp
parent409e28f9cc10d82294f8948e5a5891ae20a1ea95 (diff)
downloadllvm-3074d9df96b1b5fa3920672ef7555d3fbbc5bb65.tar.gz
llvm-3074d9df96b1b5fa3920672ef7555d3fbbc5bb65.tar.bz2
llvm-3074d9df96b1b5fa3920672ef7555d3fbbc5bb65.tar.xz
Add i16 address mode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35551 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMISelLowering.cpp')
-rw-r--r--lib/Target/ARM/ARMISelLowering.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp
index bf6d22414e..bb715cb3ca 100644
--- a/lib/Target/ARM/ARMISelLowering.cpp
+++ b/lib/Target/ARM/ARMISelLowering.cpp
@@ -1300,19 +1300,24 @@ bool ARMTargetLowering::isLegalAddressingMode(const AddrMode &AM,
return false;
default:
- // FIXME: verify.
switch (getValueType(Ty)) {
default: return false;
case MVT::i1:
case MVT::i8:
- // TODO: i16? i64 should be i32, no?
case MVT::i32:
+ case MVT::i64:
+ // This assumes i64 is legalized to a pair of i32. If not (i.e.
+ // ldrd / strd are used, then its address mode is same as i16.
// r + r
if (AM.Scale == 2)
return true;
// r + r << imm
if (!isPowerOf2_32(AM.Scale & ~1))
return false;
+ case MVT::i16:
+ // r + r
+ if (((unsigned)AM.HasBaseReg + AM.Scale) <= 2)
+ return true;
}
break;
}