Skip to content
Snippets Groups Projects
Commit 40b7f1f6 authored by Tom Stellard's avatar Tom Stellard
Browse files

R600: Use new tablegen syntax for patterns

All but two patterns have been converted to the new syntax.  The
remaining two patterns will require COPY_TO_REGCLASS instructions, which
the VLIW DAG Scheduler cannot handle.

llvm-svn: 180922
parent 5447ae20
No related branches found
No related tags found
No related merge requests found
...@@ -116,21 +116,21 @@ class CLAMP <RegisterClass rc> : AMDGPUShaderInst < ...@@ -116,21 +116,21 @@ class CLAMP <RegisterClass rc> : AMDGPUShaderInst <
(outs rc:$dst), (outs rc:$dst),
(ins rc:$src0), (ins rc:$src0),
"CLAMP $dst, $src0", "CLAMP $dst, $src0",
[(set rc:$dst, (int_AMDIL_clamp rc:$src0, (f32 FP_ZERO), (f32 FP_ONE)))] [(set f32:$dst, (int_AMDIL_clamp f32:$src0, (f32 FP_ZERO), (f32 FP_ONE)))]
>; >;
class FABS <RegisterClass rc> : AMDGPUShaderInst < class FABS <RegisterClass rc> : AMDGPUShaderInst <
(outs rc:$dst), (outs rc:$dst),
(ins rc:$src0), (ins rc:$src0),
"FABS $dst, $src0", "FABS $dst, $src0",
[(set rc:$dst, (fabs rc:$src0))] [(set f32:$dst, (fabs f32:$src0))]
>; >;
class FNEG <RegisterClass rc> : AMDGPUShaderInst < class FNEG <RegisterClass rc> : AMDGPUShaderInst <
(outs rc:$dst), (outs rc:$dst),
(ins rc:$src0), (ins rc:$src0),
"FNEG $dst, $src0", "FNEG $dst, $src0",
[(set rc:$dst, (fneg rc:$src0))] [(set f32:$dst, (fneg f32:$src0))]
>; >;
} // usesCustomInserter = 1 } // usesCustomInserter = 1
...@@ -141,8 +141,7 @@ multiclass RegisterLoadStore <RegisterClass dstClass, Operand addrClass, ...@@ -141,8 +141,7 @@ multiclass RegisterLoadStore <RegisterClass dstClass, Operand addrClass,
(outs dstClass:$dst), (outs dstClass:$dst),
(ins addrClass:$addr, i32imm:$chan), (ins addrClass:$addr, i32imm:$chan),
"RegisterLoad $dst, $addr", "RegisterLoad $dst, $addr",
[(set (i32 dstClass:$dst), (AMDGPUregister_load addrPat:$addr, [(set i32:$dst, (AMDGPUregister_load addrPat:$addr, (i32 timm:$chan)))]
(i32 timm:$chan)))]
> { > {
let isRegisterLoad = 1; let isRegisterLoad = 1;
} }
...@@ -151,7 +150,7 @@ multiclass RegisterLoadStore <RegisterClass dstClass, Operand addrClass, ...@@ -151,7 +150,7 @@ multiclass RegisterLoadStore <RegisterClass dstClass, Operand addrClass,
(outs), (outs),
(ins dstClass:$val, addrClass:$addr, i32imm:$chan), (ins dstClass:$val, addrClass:$addr, i32imm:$chan),
"RegisterStore $val, $addr", "RegisterStore $val, $addr",
[(AMDGPUregister_store (i32 dstClass:$val), addrPat:$addr, (i32 timm:$chan))] [(AMDGPUregister_store i32:$val, addrPat:$addr, (i32 timm:$chan))]
> { > {
let isRegisterStore = 1; let isRegisterStore = 1;
} }
...@@ -162,100 +161,96 @@ multiclass RegisterLoadStore <RegisterClass dstClass, Operand addrClass, ...@@ -162,100 +161,96 @@ multiclass RegisterLoadStore <RegisterClass dstClass, Operand addrClass,
/* Generic helper patterns for intrinsics */ /* Generic helper patterns for intrinsics */
/* -------------------------------------- */ /* -------------------------------------- */
class POW_Common <AMDGPUInst log_ieee, AMDGPUInst exp_ieee, AMDGPUInst mul, class POW_Common <AMDGPUInst log_ieee, AMDGPUInst exp_ieee, AMDGPUInst mul>
RegisterClass rc> : Pat < : Pat <
(fpow rc:$src0, rc:$src1), (fpow f32:$src0, f32:$src1),
(exp_ieee (mul rc:$src1, (log_ieee rc:$src0))) (exp_ieee (mul f32:$src1, (log_ieee f32:$src0)))
>; >;
/* Other helper patterns */ /* Other helper patterns */
/* --------------------- */ /* --------------------- */
/* Extract element pattern */ /* Extract element pattern */
class Extract_Element <ValueType sub_type, ValueType vec_type, class Extract_Element <ValueType sub_type, ValueType vec_type, int sub_idx,
RegisterClass vec_class, int sub_idx, SubRegIndex sub_reg>
SubRegIndex sub_reg>: Pat< : Pat<
(sub_type (vector_extract (vec_type vec_class:$src), sub_idx)), (sub_type (vector_extract vec_type:$src, sub_idx)),
(EXTRACT_SUBREG vec_class:$src, sub_reg) (EXTRACT_SUBREG $src, sub_reg)
>; >;
/* Insert element pattern */ /* Insert element pattern */
class Insert_Element <ValueType elem_type, ValueType vec_type, class Insert_Element <ValueType elem_type, ValueType vec_type,
RegisterClass elem_class, RegisterClass vec_class, int sub_idx, SubRegIndex sub_reg>
int sub_idx, SubRegIndex sub_reg> : Pat < : Pat <
(vector_insert vec_type:$vec, elem_type:$elem, sub_idx),
(vec_type (vector_insert (vec_type vec_class:$vec), (INSERT_SUBREG $vec, $elem, sub_reg)
(elem_type elem_class:$elem), sub_idx)),
(INSERT_SUBREG vec_class:$vec, elem_class:$elem, sub_reg)
>; >;
// Vector Build pattern // Vector Build pattern
class Vector1_Build <ValueType vecType, RegisterClass vectorClass, class Vector1_Build <ValueType vecType, ValueType elemType,
ValueType elemType, RegisterClass elemClass> : Pat < RegisterClass rc> : Pat <
(vecType (build_vector (elemType elemClass:$src))), (vecType (build_vector elemType:$src)),
(vecType elemClass:$src) (vecType (COPY_TO_REGCLASS $src, rc))
>; >;
class Vector2_Build <ValueType vecType, RegisterClass vectorClass, class Vector2_Build <ValueType vecType, ValueType elemType> : Pat <
ValueType elemType, RegisterClass elemClass> : Pat < (vecType (build_vector elemType:$sub0, elemType:$sub1)),
(vecType (build_vector (elemType elemClass:$sub0), (elemType elemClass:$sub1))),
(INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
(vecType (IMPLICIT_DEF)), elemClass:$sub0, sub0), elemClass:$sub1, sub1) (vecType (IMPLICIT_DEF)), $sub0, sub0), $sub1, sub1)
>; >;
class Vector4_Build <ValueType vecType, RegisterClass vectorClass, class Vector4_Build <ValueType vecType, ValueType elemType> : Pat <
ValueType elemType, RegisterClass elemClass> : Pat < (vecType (build_vector elemType:$x, elemType:$y, elemType:$z, elemType:$w)),
(vecType (build_vector (elemType elemClass:$x), (elemType elemClass:$y),
(elemType elemClass:$z), (elemType elemClass:$w))),
(INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
(vecType (IMPLICIT_DEF)), elemClass:$x, sub0), elemClass:$y, sub1), (vecType (IMPLICIT_DEF)), $x, sub0), $y, sub1), $z, sub2), $w, sub3)
elemClass:$z, sub2), elemClass:$w, sub3)
>; >;
class Vector8_Build <ValueType vecType, RegisterClass vectorClass, class Vector8_Build <ValueType vecType, ValueType elemType> : Pat <
ValueType elemType, RegisterClass elemClass> : Pat < (vecType (build_vector elemType:$sub0, elemType:$sub1,
(vecType (build_vector (elemType elemClass:$sub0), (elemType elemClass:$sub1), elemType:$sub2, elemType:$sub3,
(elemType elemClass:$sub2), (elemType elemClass:$sub3), elemType:$sub4, elemType:$sub5,
(elemType elemClass:$sub4), (elemType elemClass:$sub5), elemType:$sub6, elemType:$sub7)),
(elemType elemClass:$sub6), (elemType elemClass:$sub7))),
(INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
(INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
(vecType (IMPLICIT_DEF)), elemClass:$sub0, sub0), elemClass:$sub1, sub1), (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
elemClass:$sub2, sub2), elemClass:$sub3, sub3), (vecType (IMPLICIT_DEF)), $sub0, sub0), $sub1, sub1),
elemClass:$sub4, sub4), elemClass:$sub5, sub5), $sub2, sub2), $sub3, sub3),
elemClass:$sub6, sub6), elemClass:$sub7, sub7) $sub4, sub4), $sub5, sub5),
$sub6, sub6), $sub7, sub7)
>; >;
class Vector16_Build <ValueType vecType, RegisterClass vectorClass, class Vector16_Build <ValueType vecType, ValueType elemType> : Pat <
ValueType elemType, RegisterClass elemClass> : Pat < (vecType (build_vector elemType:$sub0, elemType:$sub1,
(vecType (build_vector (elemType elemClass:$sub0), (elemType elemClass:$sub1), elemType:$sub2, elemType:$sub3,
(elemType elemClass:$sub2), (elemType elemClass:$sub3), elemType:$sub4, elemType:$sub5,
(elemType elemClass:$sub4), (elemType elemClass:$sub5), elemType:$sub6, elemType:$sub7,
(elemType elemClass:$sub6), (elemType elemClass:$sub7), elemType:$sub8, elemType:$sub9,
(elemType elemClass:$sub8), (elemType elemClass:$sub9), elemType:$sub10, elemType:$sub11,
(elemType elemClass:$sub10), (elemType elemClass:$sub11), elemType:$sub12, elemType:$sub13,
(elemType elemClass:$sub12), (elemType elemClass:$sub13), elemType:$sub14, elemType:$sub15)),
(elemType elemClass:$sub14), (elemType elemClass:$sub15))),
(INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
(INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
(INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
(INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
(vecType (IMPLICIT_DEF)), elemClass:$sub0, sub0), elemClass:$sub1, sub1), (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
elemClass:$sub2, sub2), elemClass:$sub3, sub3), (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
elemClass:$sub4, sub4), elemClass:$sub5, sub5), (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG (INSERT_SUBREG
elemClass:$sub6, sub6), elemClass:$sub7, sub7), (vecType (IMPLICIT_DEF)), $sub0, sub0), $sub1, sub1),
elemClass:$sub8, sub8), elemClass:$sub9, sub9), $sub2, sub2), $sub3, sub3),
elemClass:$sub10, sub10), elemClass:$sub11, sub11), $sub4, sub4), $sub5, sub5),
elemClass:$sub12, sub12), elemClass:$sub13, sub13), $sub6, sub6), $sub7, sub7),
elemClass:$sub14, sub14), elemClass:$sub15, sub15) $sub8, sub8), $sub9, sub9),
$sub10, sub10), $sub11, sub11),
$sub12, sub12), $sub13, sub13),
$sub14, sub14), $sub15, sub15)
>; >;
// XXX: Convert to new syntax and use COPY_TO_REG, once the DFAPacketizer
// can handle COPY instructions.
// bitconvert pattern // bitconvert pattern
class BitConvert <ValueType dt, ValueType st, RegisterClass rc> : Pat < class BitConvert <ValueType dt, ValueType st, RegisterClass rc> : Pat <
(dt (bitconvert (st rc:$src0))), (dt (bitconvert (st rc:$src0))),
(dt rc:$src0) (dt rc:$src0)
>; >;
// XXX: Convert to new syntax and use COPY_TO_REG, once the DFAPacketizer
// can handle COPY instructions.
class DwordAddrPat<ValueType vt, RegisterClass rc> : Pat < class DwordAddrPat<ValueType vt, RegisterClass rc> : Pat <
(vt (AMDGPUdwordaddr (vt rc:$addr))), (vt (AMDGPUdwordaddr (vt rc:$addr))),
(vt rc:$addr) (vt rc:$addr)
......
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment