diff options
author | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-11-13 18:30:23 +0000 |
---|---|---|
committer | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-11-13 18:30:23 +0000 |
commit | b78ac6e3220bb8d3124947dc3cec6a3a377b2f67 (patch) | |
tree | 730ff253c4eb39a335fac1c041215c9660a729ac /llvm/utils/TableGen/GlobalISelEmitter.cpp | |
parent | f38b40daf7eb0295d1a3541fb1ceb5844702133d (diff) | |
download | bcm5719-llvm-b78ac6e3220bb8d3124947dc3cec6a3a377b2f67.tar.gz bcm5719-llvm-b78ac6e3220bb8d3124947dc3cec6a3a377b2f67.zip |
[globalisel][tablegen] Add support for extload.
llvm-svn: 318068
Diffstat (limited to 'llvm/utils/TableGen/GlobalISelEmitter.cpp')
-rw-r--r-- | llvm/utils/TableGen/GlobalISelEmitter.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp index 8a0d625ca44..83fa9c582e6 100644 --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp @@ -3507,11 +3507,12 @@ TreePatternNode *GlobalISelEmitter::fixupPatternNode(TreePatternNode *N) { // must be transformed into: // (sext:[i32] (ld:[i16] [iPTR])<<unindexed>>) // - // Likewise for zeroext-load. + // Likewise for zeroext-load and anyext-load. std::vector<TreePredicateFn> Predicates; bool IsSignExtLoad = false; bool IsZeroExtLoad = false; + bool IsAnyExtLoad = false; Record *MemVT = nullptr; for (const auto &P : N->getPredicateFns()) { if (P.isLoad() && P.isSignExtLoad()) { @@ -3522,6 +3523,10 @@ TreePatternNode *GlobalISelEmitter::fixupPatternNode(TreePatternNode *N) { IsZeroExtLoad = true; continue; } + if (P.isLoad() && P.isAnyExtLoad()) { + IsAnyExtLoad = true; + continue; + } if (P.isLoad() && P.getMemoryVT()) { MemVT = P.getMemoryVT(); continue; @@ -3529,12 +3534,13 @@ TreePatternNode *GlobalISelEmitter::fixupPatternNode(TreePatternNode *N) { Predicates.push_back(P); } - if ((IsSignExtLoad || IsZeroExtLoad) && MemVT) { - assert(((IsSignExtLoad && !IsZeroExtLoad) || - (!IsSignExtLoad && IsZeroExtLoad)) && - "IsSignExtLoad and IsZeroExtLoad are mutually exclusive"); + if ((IsSignExtLoad || IsZeroExtLoad || IsAnyExtLoad) && MemVT) { + assert((IsSignExtLoad + IsZeroExtLoad + IsAnyExtLoad) == 1 && + "IsSignExtLoad, IsZeroExtLoad, IsAnyExtLoad are mutually exclusive"); TreePatternNode *Ext = new TreePatternNode( - RK.getDef(IsSignExtLoad ? "sext" : "zext"), {N}, 1); + RK.getDef(IsSignExtLoad ? "sext" + : IsZeroExtLoad ? "zext" : "anyext"), + {N}, 1); Ext->setType(0, N->getType(0)); N->clearPredicateFns(); N->setPredicateFns(Predicates); |