summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2016-03-31 11:35:52 +0200
committerHans de Goede <hdegoede@redhat.com>2016-06-28 11:53:42 +0200
commit9240d3d02673bb71915a12055d78dd06d2416762 (patch)
treee55795c310a153b44ede32fc47537362d132db8b
parentfa11d9e574262dcd6967e9b0b0b33c790c505944 (diff)
TGSI: Implement read blockid / blocksize / gridsize intrinsics
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--lib/Target/TGSI/TGSIISelLowering.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/Target/TGSI/TGSIISelLowering.cpp b/lib/Target/TGSI/TGSIISelLowering.cpp
index 28d448528e8..2728164cf1c 100644
--- a/lib/Target/TGSI/TGSIISelLowering.cpp
+++ b/lib/Target/TGSI/TGSIISelLowering.cpp
@@ -269,6 +269,33 @@ LowerOperation(SDValue op, SelectionDAG &dag) const {
cast<ConstantSDNode>(op.getOperand(0))->getZExtValue();
EVT VT = op.getValueType();
switch(IntrinsicID) {
+ case Intrinsic::tgsi_read_blockid_x:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_BLOCK_ID(x), VT);
+ case Intrinsic::tgsi_read_blockid_y:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_BLOCK_ID(y), VT);
+ case Intrinsic::tgsi_read_blockid_z:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_BLOCK_ID(z), VT);
+ case Intrinsic::tgsi_read_blocksize_x:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_BLOCK_SIZE(x), VT);
+ case Intrinsic::tgsi_read_blocksize_y:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_BLOCK_SIZE(y), VT);
+ case Intrinsic::tgsi_read_blocksize_z:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_BLOCK_SIZE(z), VT);
+ case Intrinsic::tgsi_read_gridsize_x:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_GRID_SIZE(x), VT);
+ case Intrinsic::tgsi_read_gridsize_y:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_GRID_SIZE(y), VT);
+ case Intrinsic::tgsi_read_gridsize_z:
+ return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
+ TGSI_GRID_SIZE(z), VT);
case Intrinsic::tgsi_read_threadid_x:
return CreateLiveInRegister(dag, &TGSI::IRegsRegClass,
TGSI_THREAD_ID(x), VT);