diff options
Diffstat (limited to 'llvm/lib/Target/SystemZ/SystemZOperators.td')
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZOperators.td | 35 |
1 files changed, 5 insertions, 30 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZOperators.td b/llvm/lib/Target/SystemZ/SystemZOperators.td index 81af5fd854db..992b1512a077 100644 --- a/llvm/lib/Target/SystemZ/SystemZOperators.td +++ b/llvm/lib/Target/SystemZ/SystemZOperators.td @@ -259,7 +259,6 @@ def z_tls_ldcall : SDNode<"SystemZISD::TLS_LDCALL", SDT_ZCall, def z_pcrel_wrapper : SDNode<"SystemZISD::PCREL_WRAPPER", SDT_ZWrapPtr, []>; def z_pcrel_offset : SDNode<"SystemZISD::PCREL_OFFSET", SDT_ZWrapOffset, []>; -def z_iabs : SDNode<"SystemZISD::IABS", SDTIntUnaryOp, []>; def z_icmp : SDNode<"SystemZISD::ICMP", SDT_ZICmp>; def z_fcmp : SDNode<"SystemZISD::FCMP", SDT_ZCmp>; def z_strict_fcmp : SDNode<"SystemZISD::STRICT_FCMP", SDT_ZCmp, @@ -572,10 +571,8 @@ def anyextloadi32 : PatFrag<(ops node:$ptr), (anyextload node:$ptr), [{ // Aligned loads. class AlignedLoad<SDPatternOperator load> - : PatFrag<(ops node:$addr), (load node:$addr), [{ - auto *Load = cast<LoadSDNode>(N); - return Load->getAlignment() >= Load->getMemoryVT().getStoreSize(); -}]>; + : PatFrag<(ops node:$addr), (load node:$addr), + [{ return storeLoadIsAligned(N); }]>; def aligned_load : AlignedLoad<load>; def aligned_asextloadi16 : AlignedLoad<asextloadi16>; def aligned_asextloadi32 : AlignedLoad<asextloadi32>; @@ -584,10 +581,8 @@ def aligned_azextloadi32 : AlignedLoad<azextloadi32>; // Aligned stores. class AlignedStore<SDPatternOperator store> - : PatFrag<(ops node:$src, node:$addr), (store node:$src, node:$addr), [{ - auto *Store = cast<StoreSDNode>(N); - return Store->getAlignment() >= Store->getMemoryVT().getStoreSize(); -}]>; + : PatFrag<(ops node:$src, node:$addr), (store node:$src, node:$addr), + [{ return storeLoadIsAligned(N); }]>; def aligned_store : AlignedStore<store>; def aligned_truncstorei16 : AlignedStore<truncstorei16>; def aligned_truncstorei32 : AlignedStore<truncstorei32>; @@ -671,17 +666,7 @@ def or_as_revinserti8 : PatFrag<(ops node:$src1, node:$src2), }]>; // Negative integer absolute. -def z_inegabs : PatFrag<(ops node:$src), (ineg (z_iabs node:$src))>; - -// Integer absolute, matching the canonical form generated by DAGCombiner. -def z_iabs32 : PatFrag<(ops node:$src), - (xor (add node:$src, (sra node:$src, (i32 31))), - (sra node:$src, (i32 31)))>; -def z_iabs64 : PatFrag<(ops node:$src), - (xor (add node:$src, (sra node:$src, (i32 63))), - (sra node:$src, (i32 63)))>; -def z_inegabs32 : PatFrag<(ops node:$src), (ineg (z_iabs32 node:$src))>; -def z_inegabs64 : PatFrag<(ops node:$src), (ineg (z_iabs64 node:$src))>; +def z_inegabs : PatFrag<(ops node:$src), (ineg (abs node:$src))>; // Integer multiply-and-add def z_muladd : PatFrag<(ops node:$src1, node:$src2, node:$src3), @@ -898,16 +883,6 @@ def z_vicmph_zero : PatFrag<(ops node:$x), (z_vicmph node:$x, immAllZerosV)>; // Signed "integer less than zero" on vectors. def z_vicmpl_zero : PatFrag<(ops node:$x), (z_vicmph immAllZerosV, node:$x)>; -// Integer absolute on vectors. -class z_viabs<int shift> - : PatFrag<(ops node:$src), - (xor (add node:$src, (z_vsra_by_scalar node:$src, (i32 shift))), - (z_vsra_by_scalar node:$src, (i32 shift)))>; -def z_viabs8 : z_viabs<7>; -def z_viabs16 : z_viabs<15>; -def z_viabs32 : z_viabs<31>; -def z_viabs64 : z_viabs<63>; - // Sign-extend the i64 elements of a vector. class z_vse<int shift> : PatFrag<(ops node:$src), |
