diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2009-07-16 14:26:38 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2009-07-16 14:26:38 +0000 |
commit | b6831cb044a7f3dccd5ad80cd36b98175b9646ad (patch) | |
tree | ce428c7fa21d5eceb70356476b7677226cf0a1c9 /lib/Target/SystemZ/SystemZOperands.td | |
parent | 98db78a28b73d01af809be71cbacc9f4093acd74 (diff) | |
download | llvm-b6831cb044a7f3dccd5ad80cd36b98175b9646ad.tar.gz llvm-b6831cb044a7f3dccd5ad80cd36b98175b9646ad.tar.bz2 llvm-b6831cb044a7f3dccd5ad80cd36b98175b9646ad.tar.xz |
Unbreak mvi and friends - emit only 'significant' part of the operand
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76041 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/SystemZ/SystemZOperands.td')
-rw-r--r-- | lib/Target/SystemZ/SystemZOperands.td | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/lib/Target/SystemZ/SystemZOperands.td b/lib/Target/SystemZ/SystemZOperands.td index f72966808a..156cace9c3 100644 --- a/lib/Target/SystemZ/SystemZOperands.td +++ b/lib/Target/SystemZ/SystemZOperands.td @@ -32,6 +32,11 @@ def SYSTEMZ_COND_LE : PatLeaf<(i8 11)>; def SYSTEMZ_COND_NH : PatLeaf<(i8 12)>; def SYSTEMZ_COND_NO : PatLeaf<(i8 13)>; +def LO8 : SDNodeXForm<imm, [{ + // Transformation function: return low 8 bits. + return getI8Imm(N->getZExtValue() & 0x00000000000000FFULL); +}]>; + def LL16 : SDNodeXForm<imm, [{ // Transformation function: return low 16 bits. return getI16Imm(N->getZExtValue() & 0x000000000000FFFFULL); @@ -138,14 +143,14 @@ def immSExt16 : PatLeaf<(imm), [{ } return false; -}]>; +}], LL16>; def immSExt32 : PatLeaf<(i64 imm), [{ // immSExt32 predicate - true if the immediate fits in a 32-bit sign extended // field. uint64_t val = N->getZExtValue(); return ((int64_t)val == (int32_t)val); -}]>; +}], LO32>; def i64lo32 : PatLeaf<(i64 imm), [{ // i64lo32 predicate - true if the 64-bit immediate has only rightmost 32 @@ -173,25 +178,25 @@ def i32immSExt8 : PatLeaf<(i32 imm), [{ // i32immSExt8 predicate - True if the 32-bit immediate fits in a 8-bit // sign extended field. return (int32_t)N->getZExtValue() == (int8_t)N->getZExtValue(); -}]>; +}], LO8>; def i32immSExt16 : PatLeaf<(i32 imm), [{ // i32immSExt16 predicate - True if the 32-bit immediate fits in a 16-bit // sign extended field. return (int32_t)N->getZExtValue() == (int16_t)N->getZExtValue(); -}]>; +}], LL16>; def i64immSExt32 : PatLeaf<(i64 imm), [{ // i64immSExt32 predicate - True if the 64-bit immediate fits in a 32-bit // sign extended field. return (int64_t)N->getZExtValue() == (int32_t)N->getZExtValue(); -}]>; +}], LO32>; def i64immZExt32 : PatLeaf<(i64 imm), [{ // i64immZExt32 predicate - True if the 64-bit immediate fits in a 32-bit // zero extended field. return (uint64_t)N->getZExtValue() == (uint32_t)N->getZExtValue(); -}]>; +}], LO32>; // extloads def extloadi32i8 : PatFrag<(ops node:$ptr), (i32 (extloadi8 node:$ptr))>; |