From: Dylan McKay Date: Fri, 7 Jun 2019 06:55:00 +0000 (+0000) Subject: [AVR] Expand 16-bit rotations during the legalization stage X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dbdf58d17ebf674b1eae2b3bbc36a449af6e1f41;p=llvm [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362773 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AVR/AVRISelLowering.cpp b/lib/Target/AVR/AVRISelLowering.cpp index 3103c20f0c2..f6e1ba8d1b3 100644 --- a/lib/Target/AVR/AVRISelLowering.cpp +++ b/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);