diff options
author | Juergen Ributzka <juergen@apple.com> | 2014-09-15 21:27:54 +0000 |
---|---|---|
committer | Juergen Ributzka <juergen@apple.com> | 2014-09-15 21:27:54 +0000 |
commit | 6127b1968d2f6e504bcc3708b4ac51931d467bf8 (patch) | |
tree | 2b3d4e247639462db2e7d0b9c56767443af5d54f /llvm/lib/Target/AArch64/AArch64FastISel.cpp | |
parent | df91c927e8223260b39b61b50b2487c1a6a88d44 (diff) | |
download | bcm5719-llvm-6127b1968d2f6e504bcc3708b4ac51931d467bf8.tar.gz bcm5719-llvm-6127b1968d2f6e504bcc3708b4ac51931d467bf8.zip |
[FastISel][AArch64] Refactor code to use isTypeSupported. NFC.
Gets rid of isLoadStoreTypeLegal and replace it with isTypeSupported.
llvm-svn: 217826
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64FastISel.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64FastISel.cpp | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64FastISel.cpp b/llvm/lib/Target/AArch64/AArch64FastISel.cpp index 0577a8d5981..bbcb3bc2994 100644 --- a/llvm/lib/Target/AArch64/AArch64FastISel.cpp +++ b/llvm/lib/Target/AArch64/AArch64FastISel.cpp @@ -135,8 +135,7 @@ private: // Utility helper routines. bool isTypeLegal(Type *Ty, MVT &VT); - bool isLoadStoreTypeLegal(Type *Ty, MVT &VT); - bool isTypeSupported(Type *Ty, MVT &VT); + bool isTypeSupported(Type *Ty, MVT &VT, bool IsVectorAllowed = false); bool isValueAvailable(const Value *V) const; bool ComputeAddress(const Value *Obj, Address &Addr, Type *Ty = nullptr); bool ComputeCallAddress(const Value *V, Address &Addr); @@ -676,25 +675,12 @@ bool AArch64FastISel::isTypeLegal(Type *Ty, MVT &VT) { return TLI.isTypeLegal(VT); } -bool AArch64FastISel::isLoadStoreTypeLegal(Type *Ty, MVT &VT) { - if (isTypeLegal(Ty, VT)) - return true; - - // If this is a type than can be sign or zero-extended to a basic operation - // go ahead and accept it now. For stores, this reflects truncation. - if (VT == MVT::i1 || VT == MVT::i8 || VT == MVT::i16) - return true; - - return false; -} - /// \brief Determine if the value type is supported by FastISel. /// /// FastISel for AArch64 can handle more value types than are legal. This adds /// simple value type such as i1, i8, and i16. -/// Vectors on the other side are not supported yet. -bool AArch64FastISel::isTypeSupported(Type *Ty, MVT &VT) { - if (Ty->isVectorTy()) +bool AArch64FastISel::isTypeSupported(Type *Ty, MVT &VT, bool IsVectorAllowed) { + if (Ty->isVectorTy() && !IsVectorAllowed) return false; if (isTypeLegal(Ty, VT)) @@ -1486,7 +1472,8 @@ bool AArch64FastISel::SelectLoad(const Instruction *I) { // Verify we have a legal type before going any further. Currently, we handle // simple types that will directly fit in a register (i32/f32/i64/f64) or // those that can be sign or zero-extended to a basic operation (i1/i8/i16). - if (!isLoadStoreTypeLegal(I->getType(), VT) || cast<LoadInst>(I)->isAtomic()) + if (!isTypeSupported(I->getType(), VT, /*IsVectorAllowed=*/true) || + cast<LoadInst>(I)->isAtomic()) return false; // See if we can handle this address. @@ -1583,7 +1570,7 @@ bool AArch64FastISel::SelectStore(const Instruction *I) { // Verify we have a legal type before going any further. Currently, we handle // simple types that will directly fit in a register (i32/f32/i64/f64) or // those that can be sign or zero-extended to a basic operation (i1/i8/i16). - if (!isLoadStoreTypeLegal(Op0->getType(), VT) || + if (!isTypeSupported(Op0->getType(), VT, /*IsVectorAllowed=*/true) || cast<StoreInst>(I)->isAtomic()) return false; |