[PATCH] D52559: [AMDGPU] Divergence driven instruction selection. Shift operations.
Stanislav Mekhanoshin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 27 12:34:31 PDT 2018
rampitec added inline comments.
================
Comment at: lib/Target/AMDGPU/VOP3Instructions.td:392
+let SubtargetPredicate = isVI, Predicates = [isVI] in {
+def V_LSHLREV_B64 : VOP3Inst <"v_lshlrev_b64", VOP_PAT_GEN<VOP3_Profile<VOP_I64_I32_I64>>, shl>;
+def V_LSHRREV_B64 : VOP3Inst <"v_lshrrev_b64", VOP_PAT_GEN<VOP3_Profile<VOP_I64_I32_I64>>, srl>;
----------------
alex-t wrote:
> rampitec wrote:
> > It sounds like from your explanation below and the logic of the getVOP3Pat this will create a bogus pattern with wrong operand order. Only one pattern shall exist for (shl i64:x, i32:y) and it seems to be the pattern below. At best this one will never match.
> If we have VI and only one this:
>
> ```
> def V_LSHLREV_B64 : VOP3Inst <"v_lshlrev_b64", VOP_PAT_GEN<VOP3_Profile<VOP_I64_I32_I64>>, shl>;
>
> ```
> then "shl i64 i32" will never match.
You have the match for it right below:
(getDivergentFrag<shl>.ret i64:$x, i32:$y)
This is exactly shl i64, i32.
https://reviews.llvm.org/D52559
More information about the llvm-commits
mailing list