diff options
author | Mike Danes <onemihaid@hotmail.com> | 2016-12-17 20:49:50 +0200 |
---|---|---|
committer | Mike Danes <onemihaid@hotmail.com> | 2017-01-17 20:25:20 +0200 |
commit | 9bed8735d138e244ca340d7df1253ba6dac4c629 (patch) | |
tree | c37e0ca318a09e8e0d7497cd04f356bc943c35b6 | |
parent | e74c08ecdde10a84af4fa555efbd925f2cc08547 (diff) | |
download | coreclr-9bed8735d138e244ca340d7df1253ba6dac4c629.tar.gz coreclr-9bed8735d138e244ca340d7df1253ba6dac4c629.tar.bz2 coreclr-9bed8735d138e244ca340d7df1253ba6dac4c629.zip |
Add GT_TEST_EQ and GT_TEST_NE
-rw-r--r-- | src/jit/codegencommon.cpp | 20 | ||||
-rw-r--r-- | src/jit/codegenxarch.cpp | 4 | ||||
-rw-r--r-- | src/jit/gentree.cpp | 22 | ||||
-rw-r--r-- | src/jit/gtlist.h | 4 | ||||
-rw-r--r-- | src/jit/lowerxarch.cpp | 2 |
5 files changed, 51 insertions, 1 deletions
diff --git a/src/jit/codegencommon.cpp b/src/jit/codegencommon.cpp index f42103ebce..0198d950bf 100644 --- a/src/jit/codegencommon.cpp +++ b/src/jit/codegencommon.cpp @@ -2475,6 +2475,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind EJ_jle, // GT_LE EJ_jge, // GT_GE EJ_jg, // GT_GT +#ifndef LEGACY_BACKEND + EJ_je, // GT_TEST_EQ + EJ_jne, // GT_TEST_NE +#endif #elif defined(_TARGET_ARMARCH_) EJ_eq, // GT_EQ EJ_ne, // GT_NE @@ -2494,6 +2498,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind EJ_jbe, // GT_LE EJ_jae, // GT_GE EJ_ja, // GT_GT +#ifndef LEGACY_BACKEND + EJ_je, // GT_TEST_EQ + EJ_jne, // GT_TEST_NE +#endif #elif defined(_TARGET_ARMARCH_) EJ_eq, // GT_EQ EJ_ne, // GT_NE @@ -2513,6 +2521,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind EJ_NONE, // GT_LE EJ_jns, // GT_GE (S == 0) EJ_NONE, // GT_GT +#ifndef LEGACY_BACKEND + EJ_NONE, // GT_TEST_EQ + EJ_NONE, // GT_TEST_NE +#endif #elif defined(_TARGET_ARMARCH_) EJ_eq, // GT_EQ (Z == 1) EJ_ne, // GT_NE (Z == 0) @@ -2530,6 +2542,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind assert(genJCCinsSigned[GT_LE - GT_EQ] == EJ_jle); assert(genJCCinsSigned[GT_GE - GT_EQ] == EJ_jge); assert(genJCCinsSigned[GT_GT - GT_EQ] == EJ_jg); +#ifndef LEGACY_BACKEND + assert(genJCCinsSigned[GT_TEST_EQ - GT_EQ] == EJ_je); + assert(genJCCinsSigned[GT_TEST_NE - GT_EQ] == EJ_jne); +#endif assert(genJCCinsUnsigned[GT_EQ - GT_EQ] == EJ_je); assert(genJCCinsUnsigned[GT_NE - GT_EQ] == EJ_jne); @@ -2537,6 +2553,10 @@ emitJumpKind CodeGen::genJumpKindForOper(genTreeOps cmp, CompareKind compareKind assert(genJCCinsUnsigned[GT_LE - GT_EQ] == EJ_jbe); assert(genJCCinsUnsigned[GT_GE - GT_EQ] == EJ_jae); assert(genJCCinsUnsigned[GT_GT - GT_EQ] == EJ_ja); +#ifndef LEGACY_BACKEND + assert(genJCCinsUnsigned[GT_TEST_EQ - GT_EQ] == EJ_je); + assert(genJCCinsUnsigned[GT_TEST_NE - GT_EQ] == EJ_jne); +#endif assert(genJCCinsLogical[GT_EQ - GT_EQ] == EJ_je); assert(genJCCinsLogical[GT_NE - GT_EQ] == EJ_jne); diff --git a/src/jit/codegenxarch.cpp b/src/jit/codegenxarch.cpp index af004c8fdd..c4d4fb9e36 100644 --- a/src/jit/codegenxarch.cpp +++ b/src/jit/codegenxarch.cpp @@ -1779,6 +1779,8 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode) case GT_LE: case GT_GE: case GT_GT: + case GT_TEST_EQ: + case GT_TEST_NE: { // TODO-XArch-CQ: Check if we can use the currently set flags. // TODO-XArch-CQ: Check for the case where we can simply transfer the carry bit to a register @@ -6144,7 +6146,7 @@ void CodeGen::genCompareInt(GenTreePtr treeNode) // By default we use an int32 sized cmp instruction // - ins = INS_cmp; + ins = ((treeNode->OperGet() == GT_TEST_EQ) || (treeNode->OperGet() == GT_TEST_NE)) ? INS_test : INS_cmp; var_types cmpType = TYP_INT; // In the if/then/else statement below we may change the diff --git a/src/jit/gentree.cpp b/src/jit/gentree.cpp index fa75f5bcbc..795e6d265b 100644 --- a/src/jit/gentree.cpp +++ b/src/jit/gentree.cpp @@ -3375,6 +3375,10 @@ genTreeOps GenTree::ReverseRelop(genTreeOps relop) GT_GT, // GT_LE GT_LT, // GT_GE GT_LE, // GT_GT +#ifndef LEGACY_BACKEND + GT_TEST_NE, // GT_TEST_EQ + GT_TEST_EQ, // GT_TEST_NE +#endif }; assert(reverseOps[GT_EQ - GT_EQ] == GT_NE); @@ -3385,6 +3389,11 @@ genTreeOps GenTree::ReverseRelop(genTreeOps relop) assert(reverseOps[GT_GE - GT_EQ] == GT_LT); assert(reverseOps[GT_GT - GT_EQ] == GT_LE); +#ifndef LEGACY_BACKEND + assert(reverseOps[GT_TEST_EQ - GT_EQ] == GT_TEST_NE); + assert(reverseOps[GT_TEST_NE - GT_EQ] == GT_TEST_EQ); +#endif + assert(OperIsCompare(relop)); assert(relop >= GT_EQ && (unsigned)(relop - GT_EQ) < sizeof(reverseOps)); @@ -3406,6 +3415,10 @@ genTreeOps GenTree::SwapRelop(genTreeOps relop) GT_GE, // GT_LE GT_LE, // GT_GE GT_LT, // GT_GT +#ifndef LEGACY_BACKEND + GT_TEST_EQ, // GT_TEST_EQ + GT_TEST_NE, // GT_TEST_NE +#endif }; assert(swapOps[GT_EQ - GT_EQ] == GT_EQ); @@ -3416,6 +3429,11 @@ genTreeOps GenTree::SwapRelop(genTreeOps relop) assert(swapOps[GT_GE - GT_EQ] == GT_LE); assert(swapOps[GT_GT - GT_EQ] == GT_LT); +#ifndef LEGACY_BACKEND + assert(swapOps[GT_TEST_EQ - GT_EQ] == GT_TEST_EQ); + assert(swapOps[GT_TEST_NE - GT_EQ] == GT_TEST_NE); +#endif + assert(OperIsCompare(relop)); assert(relop >= GT_EQ && (unsigned)(relop - GT_EQ) < sizeof(swapOps)); @@ -10259,6 +10277,10 @@ void Compiler::gtDispNode(GenTreePtr tree, IndentStack* indentStack, __in __in_z case GT_LE: case GT_GE: case GT_GT: +#ifndef LEGACY_BACKEND + case GT_TEST_EQ: + case GT_TEST_NE: +#endif if (tree->gtFlags & GTF_RELOP_NAN_UN) { printf("N"); diff --git a/src/jit/gtlist.h b/src/jit/gtlist.h index 707ae61215..fb6d8e891f 100644 --- a/src/jit/gtlist.h +++ b/src/jit/gtlist.h @@ -145,6 +145,10 @@ GTNODE(LT , "<" ,GenTreeOp ,0,GTK_BINOP|GTK_RE GTNODE(LE , "<=" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) GTNODE(GE , ">=" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) GTNODE(GT , ">" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) +#ifndef LEGACY_BACKEND +GTNODE(TEST_EQ , "testEQ" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) +GTNODE(TEST_NE , "testNE" ,GenTreeOp ,0,GTK_BINOP|GTK_RELOP) +#endif GTNODE(COMMA , "comma" ,GenTreeOp ,0,GTK_BINOP|GTK_NOTLIR) diff --git a/src/jit/lowerxarch.cpp b/src/jit/lowerxarch.cpp index c7d8a09320..844063091d 100644 --- a/src/jit/lowerxarch.cpp +++ b/src/jit/lowerxarch.cpp @@ -601,6 +601,8 @@ void Lowering::TreeNodeInfoInit(GenTree* tree) case GT_LE: case GT_GE: case GT_GT: + case GT_TEST_EQ: + case GT_TEST_NE: TreeNodeInfoInitCmp(tree); break; |