[llvm] r222792 - [Hexagon] Adding compare with immediate instructions.
Colin LeMahieu
colinl at codeaurora.org
Tue Nov 25 13:30:28 PST 2014
Author: colinl
Date: Tue Nov 25 15:30:28 2014
New Revision: 222792
URL: http://llvm.org/viewvc/llvm-project?rev=222792&view=rev
Log:
[Hexagon] Adding compare with immediate instructions.
Added:
llvm/trunk/test/MC/Hexagon/inst_cmp_eqi.ll
llvm/trunk/test/MC/Hexagon/inst_cmp_gti.ll
llvm/trunk/test/MC/Hexagon/inst_cmp_ugti.ll
Modified:
llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.td
Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.td?rev=222792&r1=222791&r2=222792&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.td (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.td Tue Nov 25 15:30:28 2014
@@ -16,6 +16,47 @@ include "HexagonOperands.td"
//===----------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
+// Compare
+//===----------------------------------------------------------------------===//
+let hasSideEffects = 0, isCompare = 1, InputType = "imm", isExtendable = 1,
+ opExtendable = 2 in
+class T_CMP <string mnemonic, bits<2> MajOp, bit isNot, Operand ImmOp>
+ : ALU32Inst <(outs PredRegs:$dst),
+ (ins IntRegs:$src1, ImmOp:$src2),
+ "$dst = "#!if(isNot, "!","")#mnemonic#"($src1, #$src2)",
+ [], "",ALU32_2op_tc_2early_SLOT0123 >, ImmRegRel {
+ bits<2> dst;
+ bits<5> src1;
+ bits<10> src2;
+ let CextOpcode = mnemonic;
+ let opExtentBits = !if(!eq(mnemonic, "cmp.gtu"), 9, 10);
+ let isExtentSigned = !if(!eq(mnemonic, "cmp.gtu"), 0, 1);
+
+ let IClass = 0b0111;
+
+ let Inst{27-24} = 0b0101;
+ let Inst{23-22} = MajOp;
+ let Inst{21} = !if(!eq(mnemonic, "cmp.gtu"), 0, src2{9});
+ let Inst{20-16} = src1;
+ let Inst{13-5} = src2{8-0};
+ let Inst{4} = isNot;
+ let Inst{3-2} = 0b00;
+ let Inst{1-0} = dst;
+ }
+
+def C2_cmpeqi : T_CMP <"cmp.eq", 0b00, 0, s10Ext>;
+def C2_cmpgti : T_CMP <"cmp.gt", 0b01, 0, s10Ext>;
+def C2_cmpgtui : T_CMP <"cmp.gtu", 0b10, 0, u9Ext>;
+
+class T_CMP_pat <InstHexagon MI, PatFrag OpNode, PatLeaf ImmPred>
+ : Pat<(i1 (OpNode (i32 IntRegs:$src1), ImmPred:$src2)),
+ (MI IntRegs:$src1, ImmPred:$src2)>;
+
+def : T_CMP_pat <C2_cmpeqi, seteq, s10ImmPred>;
+def : T_CMP_pat <C2_cmpgti, setgt, s10ImmPred>;
+def : T_CMP_pat <C2_cmpgtui, setugt, u9ImmPred>;
+
// Multi-class for logical operators.
multiclass ALU32_rr_ri<string OpcStr, SDNode OpNode> {
def rr : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$b, IntRegs:$c),
Added: llvm/trunk/test/MC/Hexagon/inst_cmp_eqi.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Hexagon/inst_cmp_eqi.ll?rev=222792&view=auto
==============================================================================
--- llvm/trunk/test/MC/Hexagon/inst_cmp_eqi.ll (added)
+++ llvm/trunk/test/MC/Hexagon/inst_cmp_eqi.ll Tue Nov 25 15:30:28 2014
@@ -0,0 +1,10 @@
+;; RUN: llc -mtriple=hexagon-unknown-elf -filetype=obj %s -o - \
+;; RUN: | llvm-objdump -s - | FileCheck %s
+
+define i1 @foo (i32 %a)
+{
+ %1 = icmp eq i32 %a, 42
+ ret i1 %1
+}
+
+; CHECK: 0000 40450075 00400000 00c09f52
Added: llvm/trunk/test/MC/Hexagon/inst_cmp_gti.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Hexagon/inst_cmp_gti.ll?rev=222792&view=auto
==============================================================================
--- llvm/trunk/test/MC/Hexagon/inst_cmp_gti.ll (added)
+++ llvm/trunk/test/MC/Hexagon/inst_cmp_gti.ll Tue Nov 25 15:30:28 2014
@@ -0,0 +1,10 @@
+;; RUN: llc -mtriple=hexagon-unknown-elf -filetype=obj %s -o - \
+;; RUN: | llvm-objdump -s - | FileCheck %s
+
+define i1 @foo (i32 %a)
+{
+ %1 = icmp sgt i32 %a, 42
+ ret i1 %1
+}
+
+; CHECK: 0000 40454075 00400000 00c09f52
Added: llvm/trunk/test/MC/Hexagon/inst_cmp_ugti.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Hexagon/inst_cmp_ugti.ll?rev=222792&view=auto
==============================================================================
--- llvm/trunk/test/MC/Hexagon/inst_cmp_ugti.ll (added)
+++ llvm/trunk/test/MC/Hexagon/inst_cmp_ugti.ll Tue Nov 25 15:30:28 2014
@@ -0,0 +1,10 @@
+;; RUN: llc -mtriple=hexagon-unknown-elf -filetype=obj %s -o - \
+;; RUN: | llvm-objdump -s - | FileCheck %s
+
+define i1 @foo (i32 %a)
+{
+ %1 = icmp ugt i32 %a, 42
+ ret i1 %1
+}
+
+; CHECK: 0000 40458075 00400000 00c09f52
More information about the llvm-commits
mailing list