diff options
author | Tom Stellard <[email protected]> | 2012-06-01 14:49:03 -0400 |
---|---|---|
committer | Tom Stellard <[email protected]> | 2012-06-01 16:52:26 -0400 |
commit | 0ebf2318b3d5e60adfc43e477b19acdc3cd4cc07 (patch) | |
tree | 0fc1f6ded65fc97e095420b7d3750f32098c0eb5 /src/gallium/drivers/radeon/R600Instructions.td | |
parent | c108831d4451f624167d2c433282c6ac63541a79 (diff) |
radeon/llvm: Fix VTX_READ patterns
The VTX_READ instructions were using the ADDRParam ComplexPattern which
allows a load instruction's offset to be a register, but VTX_READ
instructions can only handle an immediate offset.
Also, the load_param pattern fragment had an erroneous return true;
statement that was causing it to match the wrong load instructions.
Diffstat (limited to 'src/gallium/drivers/radeon/R600Instructions.td')
-rw-r--r-- | src/gallium/drivers/radeon/R600Instructions.td | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeon/R600Instructions.td b/src/gallium/drivers/radeon/R600Instructions.td index e12ebab60c9..921d5650060 100644 --- a/src/gallium/drivers/radeon/R600Instructions.td +++ b/src/gallium/drivers/radeon/R600Instructions.td @@ -51,6 +51,7 @@ def MEMrr : Operand<iPTR> { def ADDRParam : ComplexPattern<i32, 2, "SelectADDRParam", [], []>; def ADDRDWord : ComplexPattern<i32, 1, "SelectADDRDWord", [], []>; +def ADDRVTX_READ : ComplexPattern<i32, 2, "SelectADDRVTX_READ", [], []>; class R600_ALU { @@ -225,7 +226,6 @@ def store_global : PatFrag<(ops node:$value, node:$ptr), def load_param : PatFrag<(ops node:$ptr), (load node:$ptr), [{ - return true; const Value *Src = cast<LoadSDNode>(N)->getSrcValue(); if (Src) { PointerType * PT = dyn_cast<PointerType>(Src->getType()); @@ -804,11 +804,11 @@ class VTX_READ_eg <int buffer_id, list<dag> pattern> : InstR600ISA < >; def VTX_READ_PARAM_eg : VTX_READ_eg <0, - [(set (i32 R600_TReg32_X:$dst), (load_param ADDRParam:$ptr))] + [(set (i32 R600_TReg32_X:$dst), (load_param ADDRVTX_READ:$ptr))] >; def VTX_READ_GLOBAL_eg : VTX_READ_eg <1, - [(set (i32 R600_TReg32_X:$dst), (global_load ADDRParam:$ptr))] + [(set (i32 R600_TReg32_X:$dst), (global_load ADDRVTX_READ:$ptr))] >; } // End isEG Predicate |