aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/X86/X86ISelDAGToDAG.cpp42
1 files changed, 30 insertions, 12 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp
index 8c61bbafe2..b3383c4f93 100644
--- a/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -1482,6 +1482,24 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
}
}
+enum AtomicOpc {
+ OR
+};
+
+enum AtomicSz {
+ ConstantI8,
+ I8,
+ SextConstantI16,
+ ConstantI16,
+ I16,
+ SextConstantI32,
+ ConstantI32,
+ I32,
+ SextConstantI64,
+ ConstantI64,
+ I64
+};
+
static const unsigned int AtomicOpcTbl[1][11] = {
{
X86::LOCK_OR8mi,
@@ -1521,42 +1539,42 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadOr(SDNode *Node, EVT NVT) {
}
// Which index into the table.
- unsigned index = 0;
+ enum AtomicOpc Op = OR;
unsigned Opc = 0;
switch (NVT.getSimpleVT().SimpleTy) {
default: return 0;
case MVT::i8:
if (isCN)
- Opc = AtomicOpcTbl[index][0];
+ Opc = AtomicOpcTbl[Op][ConstantI8];
else
- Opc = AtomicOpcTbl[index][1];
+ Opc = AtomicOpcTbl[Op][I8];
break;
case MVT::i16:
if (isCN) {
if (immSext8(Val.getNode()))
- Opc = AtomicOpcTbl[index][2];
+ Opc = AtomicOpcTbl[Op][SextConstantI16];
else
- Opc = AtomicOpcTbl[index][3];
+ Opc = AtomicOpcTbl[Op][ConstantI16];
} else
- Opc = AtomicOpcTbl[index][4];
+ Opc = AtomicOpcTbl[Op][I16];
break;
case MVT::i32:
if (isCN) {
if (immSext8(Val.getNode()))
- Opc = AtomicOpcTbl[index][5];
+ Opc = AtomicOpcTbl[Op][SextConstantI32];
else
- Opc = AtomicOpcTbl[index][6];
+ Opc = AtomicOpcTbl[Op][ConstantI32];
} else
- Opc = AtomicOpcTbl[index][7];
+ Opc = AtomicOpcTbl[Op][I32];
break;
case MVT::i64:
if (isCN) {
if (immSext8(Val.getNode()))
- Opc = AtomicOpcTbl[index][8];
+ Opc = AtomicOpcTbl[Op][SextConstantI64];
else if (i64immSExt32(Val.getNode()))
- Opc = AtomicOpcTbl[index][9];
+ Opc = AtomicOpcTbl[Op][ConstantI64];
} else
- Opc = AtomicOpcTbl[index][10];
+ Opc = AtomicOpcTbl[Op][I64];
break;
}