summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorRichard Osborne <richard@xmos.com>2009-10-08 15:38:17 +0000
committerRichard Osborne <richard@xmos.com>2009-10-08 15:38:17 +0000
commit4e13316bf90d9a9c39452b229d567700edc8cb9a (patch)
treed704712a6eb9f3b2f30228114152f24c9aee4a03 /llvm/lib
parent1e9b25caf4e0a8115e6564c3ca7dc7285c3b21f3 (diff)
downloadbcm5719-llvm-4e13316bf90d9a9c39452b229d567700edc8cb9a.tar.gz
bcm5719-llvm-4e13316bf90d9a9c39452b229d567700edc8cb9a.zip
Add some peepholes for signed comparisons using ashr X, X, 32.
llvm-svn: 83549
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/XCore/XCoreInstrInfo.td16
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/XCore/XCoreInstrInfo.td b/llvm/lib/Target/XCore/XCoreInstrInfo.td
index d75cf9b8b8a..4b9ea7a4917 100644
--- a/llvm/lib/Target/XCore/XCoreInstrInfo.td
+++ b/llvm/lib/Target/XCore/XCoreInstrInfo.td
@@ -975,5 +975,21 @@ def : Pat<(mul GRRegs:$src, -3),
def : Pat<(sra GRRegs:$src, 31),
(ASHR_l2rus GRRegs:$src, 32)>;
+def : Pat<(brcond (setlt GRRegs:$lhs, 0), bb:$dst),
+ (BRFT_lru6 (ASHR_l2rus GRRegs:$lhs, 32), bb:$dst)>;
+
+// setge X, 0 is canonicalized to setgt X, -1
+def : Pat<(brcond (setgt GRRegs:$lhs, -1), bb:$dst),
+ (BRFF_lru6 (ASHR_l2rus GRRegs:$lhs, 32), bb:$dst)>;
+
+def : Pat<(select (setlt GRRegs:$lhs, 0), GRRegs:$T, GRRegs:$F),
+ (SELECT_CC (ASHR_l2rus GRRegs:$lhs, 32), GRRegs:$T, GRRegs:$F)>;
+
+def : Pat<(select (setgt GRRegs:$lhs, -1), GRRegs:$T, GRRegs:$F),
+ (SELECT_CC (ASHR_l2rus GRRegs:$lhs, 32), GRRegs:$F, GRRegs:$T)>;
+
+def : Pat<(setgt GRRegs:$lhs, -1),
+ (EQ_2rus (ASHR_l2rus GRRegs:$lhs, 32), 0)>;
+
def : Pat<(sra (shl GRRegs:$src, immBpwSubBitp:$imm), immBpwSubBitp:$imm),
(SEXT_rus GRRegs:$src, (bpwsub_xform immBpwSubBitp:$imm))>;
OpenPOWER on IntegriCloud