let PrintMethod = "printImmOperand";
}
-// f32Ext type is used to identify constant extended floating point
-// Immediate operands.
-def f32Ext : Operand<f32> {
- let PrintMethod = "printImmOperand";
-}
-
def s16Imm : Operand<i32> {
let PrintMethod = "printImmOperand";
}
return (-1 == v);
}]>;
-// Operand types for constant extendable operands
-def s16Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s12Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s10Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s9Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s8Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s6Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s11_0Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s11_1Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s11_2Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def s11_3Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u6Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u7Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u8Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u9Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u10Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u6_0Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u6_1Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u6_2Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-def u6_3Ext : Operand<i32> {
- let PrintMethod = "printExtOperand";
-}
-
-// Predicates for constant extendable operands
-def s16ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 16-bit sign extended field.
- return isInt<16>(v);
- else {
- if (isInt<16>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit signed field.
- if (isConstExtProfitable(Node) && isInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s10ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 10-bit sign extended field.
- return isInt<10>(v);
- else {
- if (isInt<10>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit signed field.
- if (isConstExtProfitable(Node) && isInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s9ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 9-bit sign extended field.
- return isInt<9>(v);
- else {
- if (isInt<9>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit unsigned field.
- if (isConstExtProfitable(Node) && isInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s8ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 8-bit sign extended field.
- return isInt<8>(v);
- else {
- if (isInt<8>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit signed field.
- if (isConstExtProfitable(Node) && isInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s8_16ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate fits in a 8-bit sign extended field.
- return isInt<8>(v);
- else {
- if (isInt<8>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can't fit in a 16-bit signed field. This is required to avoid
- // unnecessary constant extenders.
- if (isConstExtProfitable(Node) && !isInt<16>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s6ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 6-bit sign extended field.
- return isInt<6>(v);
- else {
- if (isInt<6>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit unsigned field.
- if (isConstExtProfitable(Node) && isInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s6_16ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate fits in a 6-bit sign extended field.
- return isInt<6>(v);
- else {
- if (isInt<6>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can't fit in a 16-bit signed field. This is required to avoid
- // unnecessary constant extenders.
- if (isConstExtProfitable(Node) && !isInt<16>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s6_10ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 6-bit sign extended field.
- return isInt<6>(v);
- else {
- if (isInt<6>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can't fit in a 10-bit signed field. This is required to avoid
- // unnecessary constant extenders.
- if (isConstExtProfitable(Node) && !isInt<10>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s11_0ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 11-bit sign extended field.
- return isShiftedInt<11,0>(v);
- else {
- if (isInt<11>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit signed field.
- if (isConstExtProfitable(Node) && isInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def s11_1ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 12-bit sign extended field and
- // is 2 byte aligned.
- return isShiftedInt<11,1>(v);
- else {
- if (isInt<12>(v))
- return isShiftedInt<11,1>(v);
-
- // Return true if extending this immediate is profitable and the low 1 bit
- // is zero (2-byte aligned).
- if (isConstExtProfitable(Node) && isInt<32>(v) && ((v % 2) == 0))
- return true;
- else
- return false;
- }
-}]>;
-
-def s11_2ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 13-bit sign extended field and
- // is 4-byte aligned.
- return isShiftedInt<11,2>(v);
- else {
- if (isInt<13>(v))
- return isShiftedInt<11,2>(v);
-
- // Return true if extending this immediate is profitable and the low 2-bits
- // are zero (4-byte aligned).
- if (isConstExtProfitable(Node) && isInt<32>(v) && ((v % 4) == 0))
- return true;
- else
- return false;
- }
-}]>;
-
-def s11_3ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 14-bit sign extended field and
- // is 8-byte aligned.
- return isShiftedInt<11,3>(v);
- else {
- if (isInt<14>(v))
- return isShiftedInt<11,3>(v);
-
- // Return true if extending this immediate is profitable and the low 3-bits
- // are zero (8-byte aligned).
- if (isConstExtProfitable(Node) && isInt<32>(v) && ((v % 8) == 0))
- return true;
- else
- return false;
- }
-}]>;
-
-def u6ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 6-bit unsigned field.
- return isUInt<6>(v);
- else {
- if (isUInt<6>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit unsigned field.
- if (isConstExtProfitable(Node) && isUInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def u7ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 7-bit unsigned field.
- return isUInt<7>(v);
- else {
- if (isUInt<7>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit unsigned field.
- if (isConstExtProfitable(Node) && isUInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def u8ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 8-bit unsigned field.
- return isUInt<8>(v);
- else {
- if (isUInt<8>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit unsigned field.
- if (isConstExtProfitable(Node) && isUInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def u9ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 9-bit unsigned field.
- return isUInt<9>(v);
- else {
- if (isUInt<9>(v))
- return true;
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit unsigned field.
- if (isConstExtProfitable(Node) && isUInt<32>(v))
- return true;
- else
- return false;
- }
-}]>;
-
-def u6_2ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 8-bit unsigned field and
- // is 4-byte aligned.
- return isShiftedUInt<6,2>(v);
- else {
- if (isUInt<9>(v))
- return isShiftedUInt<6,2>(v);
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit unsigned field.
- if (isConstExtProfitable(Node) && isUInt<32>(v) && ((v % 4) == 0))
- return true;
- else
- return false;
- }
-}]>;
-
-def u6_3ExtPred : PatLeaf<(i32 imm), [{
- int64_t v = (int64_t)N->getSExtValue();
- if (!Subtarget.hasV4TOps())
- // Return true if the immediate can fit in a 9-bit unsigned field and
- // is 8-byte aligned.
- return isShiftedUInt<6,3>(v);
- else {
- if (isUInt<9>(v))
- return isShiftedUInt<6,3>(v);
-
- // Return true if extending this immediate is profitable and the value
- // can fit in a 32-bit unsigned field.
- if (isConstExtProfitable(Node) && isUInt<32>(v) && ((v % 8) == 0))
- return true;
- else
- return false;
- }
-}]>;