summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDylan McKay <me@dylanmckay.io>2019-06-07 06:55:00 +0000
committerDylan McKay <me@dylanmckay.io>2019-06-07 06:55:00 +0000
commit04b418f2460153969ccf7e72a2ee90aad6c8fd35 (patch)
treeb6ae872a92091bbd3549bc1889b26fb4a734a367 /llvm/lib
parent65d1ff8e7e2d9e67b0defb5d4af880eb808a0d27 (diff)
downloadbcm5719-llvm-04b418f2460153969ccf7e72a2ee90aad6c8fd35.tar.gz
bcm5719-llvm-04b418f2460153969ccf7e72a2ee90aad6c8fd35.zip
[AVR] Expand 16-bit rotations during the legalization stage
In r356860, the legalization logic for BSWAP was modified to ISD::ROTL, rather than the old ISD::{SHL, SRL, OR} nodes. This works fine on AVR for 8-bit rotations, but 16-bit rotations are currently unimplemented - they always trigger an assertion error in the AVRExpandPseudoInsts pass ("RORW unimplemented"). This patch instructions the legalizer to expand 16-bit rotations into the previous SHL, SRL, OR pattern it did previously. This fixes the 'issue-cannot-select-bswap.ll' test. Interestingly, this test failure seems flaky - it passes successfully on the avr-build-01 buildbot, but fails locally on my Arch Linux install. llvm-svn: 362773
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/AVR/AVRISelLowering.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/AVR/AVRISelLowering.cpp b/llvm/lib/Target/AVR/AVRISelLowering.cpp
index 3103c20f0c2..f6e1ba8d1b3 100644
--- a/llvm/lib/Target/AVR/AVRISelLowering.cpp
+++ b/llvm/lib/Target/AVR/AVRISelLowering.cpp
@@ -89,9 +89,9 @@ AVRTargetLowering::AVRTargetLowering(const AVRTargetMachine &TM,
setOperationAction(ISD::SRL_PARTS, MVT::i16, Expand);
setOperationAction(ISD::ROTL, MVT::i8, Custom);
- setOperationAction(ISD::ROTL, MVT::i16, Custom);
+ setOperationAction(ISD::ROTL, MVT::i16, Expand);
setOperationAction(ISD::ROTR, MVT::i8, Custom);
- setOperationAction(ISD::ROTR, MVT::i16, Custom);
+ setOperationAction(ISD::ROTR, MVT::i16, Expand);
setOperationAction(ISD::BR_CC, MVT::i8, Custom);
setOperationAction(ISD::BR_CC, MVT::i16, Custom);
OpenPOWER on IntegriCloud