[llvm] fe0763d - [TargetLowering][DAGCombine][MSP430] Shift Amount Threshold in DAGCombine (3) (baseline tests)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 8 14:16:58 PST 2019
Author: joanlluch
Date: 2019-11-08T23:16:44+01:00
New Revision: fe0763d28a572f72007637c7bd097bc19cbb58fc
URL: https://github.com/llvm/llvm-project/commit/fe0763d28a572f72007637c7bd097bc19cbb58fc
DIFF: https://github.com/llvm/llvm-project/commit/fe0763d28a572f72007637c7bd097bc19cbb58fc.diff
LOG: [TargetLowering][DAGCombine][MSP430] Shift Amount Threshold in DAGCombine (3) (baseline tests)
Summary:
This is baseline tests for D69326
Incorporates a command line flag for the MSP430 and adds a test cases to help showing the effects of applying D69326
More details and motivation for this patch in D69326
Reviewers: spatel, asl, lebedev.ri
Reviewed By: spatel, asl
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D69975
Added:
llvm/test/CodeGen/MSP430/shift-amount-threshold-b.ll
Modified:
llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
llvm/lib/Target/MSP430/MSP430ISelLowering.h
Removed:
################################################################################
diff --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
index 1ee5489f1972..b6a658f30a8c 100644
--- a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
+++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
@@ -37,6 +37,11 @@ using namespace llvm;
#define DEBUG_TYPE "msp430-lower"
+static cl::opt<bool>MSP430NoLegalImmediate(
+ "msp430-no-legal-immediate", cl::Hidden,
+ cl::desc("Enable non legal immediates (for testing purposes only)"),
+ cl::init(false));
+
MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
const MSP430Subtarget &STI)
: TargetLowering(TM) {
@@ -357,6 +362,15 @@ SDValue MSP430TargetLowering::LowerOperation(SDValue Op,
unsigned MSP430TargetLowering::getShiftAmountThreshold(EVT VT) const {
return 2;
}
+
+// Implemented to verify test case assertions in
+// tests/codegen/msp430/shift-amount-threshold-b.ll
+bool MSP430TargetLowering::isLegalICmpImmediate(int64_t Immed) const {
+ if (MSP430NoLegalImmediate)
+ return Immed >= -32 && Immed < 32;
+ return TargetLowering::isLegalICmpImmediate(Immed);
+}
+
//===----------------------------------------------------------------------===//
// MSP430 Inline Assembly Support
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.h b/llvm/lib/Target/MSP430/MSP430ISelLowering.h
index 9224e5e3d005..64ddbbdf6c84 100644
--- a/llvm/lib/Target/MSP430/MSP430ISelLowering.h
+++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.h
@@ -124,6 +124,7 @@ namespace llvm {
bool isZExtFree(EVT VT1, EVT VT2) const override;
bool isZExtFree(SDValue Val, EVT VT2) const override;
+ bool isLegalICmpImmediate(int64_t) const override;
unsigned getShiftAmountThreshold(EVT VT) const override;
MachineBasicBlock *
diff --git a/llvm/test/CodeGen/MSP430/shift-amount-threshold-b.ll b/llvm/test/CodeGen/MSP430/shift-amount-threshold-b.ll
new file mode 100644
index 000000000000..9022c33b3847
--- /dev/null
+++ b/llvm/test/CodeGen/MSP430/shift-amount-threshold-b.ll
@@ -0,0 +1,73 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=msp430-- -msp430-no-legal-immediate=true < %s | FileCheck %s
+
+; Test case for the following transformation in TargetLowering::SimplifySetCC
+; (X & -256) == 256 -> (X >> 8) == 1
+define i16 @testSimplifySetCC_2(i16 %x) {
+; CHECK-LABEL: testSimplifySetCC_2:
+; CHECK: ; %bb.0: ; %entry
+; CHECK-NEXT: clrc
+; CHECK-NEXT: rrc r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: cmp #1, r12
+; CHECK-NEXT: mov r2, r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: and #1, r12
+; CHECK-NEXT: ret
+entry:
+ %and = and i16 %x, -64
+ %cmp = icmp eq i16 %and, 64
+ %conv = zext i1 %cmp to i16
+ ret i16 %conv
+}
+
+; Test case for the following transformation in TargetLowering::SimplifySetCC
+; X > 0x0ffffffff -> (X >> 32) >= 1
+define i16 @testSimplifySetCC_3(i16 %x) {
+; CHECK-LABEL: testSimplifySetCC_3:
+; CHECK: ; %bb.0: ; %entry
+; CHECK-NEXT: clrc
+; CHECK-NEXT: rrc r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: tst r12
+; CHECK-NEXT: mov r2, r13
+; CHECK-NEXT: rra r13
+; CHECK-NEXT: mov #1, r12
+; CHECK-NEXT: bic r13, r12
+; CHECK-NEXT: ret
+entry:
+ %cmp = icmp ugt i16 %x, 63
+ %conv = zext i1 %cmp to i16
+ ret i16 %conv
+}
+
+; Test case for the following transformation in TargetLowering::SimplifySetCC
+; X < 0x100000000 -> (X >> 32) < 1
+define i16 @testSimplifySetCC_4(i16 %x) {
+; CHECK-LABEL: testSimplifySetCC_4:
+; CHECK: ; %bb.0: ; %entry
+; CHECK-NEXT: clrc
+; CHECK-NEXT: rrc r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: tst r12
+; CHECK-NEXT: mov r2, r12
+; CHECK-NEXT: rra r12
+; CHECK-NEXT: and #1, r12
+; CHECK-NEXT: ret
+entry:
+ %cmp = icmp ult i16 %x, 64
+ %conv = zext i1 %cmp to i16
+ ret i16 %conv
+}
More information about the llvm-commits
mailing list