[llvm] [GlobalIsel] Cleanup G_EXTRACT_VECTOR_ELT combines (PR #109047)
Thorsten Schütt via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 18 08:05:07 PDT 2024
================
@@ -1373,110 +1373,23 @@ def extract_vector_element_different_indices : GICombineRule<
[{ return Helper.matchExtractVectorElementWithDifferentIndices(${root}, ${matchinfo}); }]),
(apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-def extract_vector_element_build_vector2 : GICombineRule<
+def extract_vector_element_build_vector : GICombineRule<
(defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector3 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector4 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector5 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector6 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b, $c),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector7 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b, $c, $d),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector8 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b, $c, $d, $e),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector9 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b, $c, $d, $e, $f),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector10 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b, $c, $d, $e, $f, $g),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector11 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b, $c, $d, $e, $f, $g, $h),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector12 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b, $c, $d, $e, $f, $g, $h, $i),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
-
-def extract_vector_element_build_vector13 : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (G_BUILD_VECTOR $src, $x, $y, $z, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j),
- (G_EXTRACT_VECTOR_ELT $root, $src, $idx),
- [{ return Helper.matchExtractVectorElementWithBuildVector(${root}, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
+ (match (G_CONSTANT $idx, $imm),
----------------
tschuett wrote:
```
APInt llvm::getIConstantFromReg(Register Reg, const MachineRegisterInfo &MRI) {
MachineInstr *Const = MRI.getVRegDef(Reg);
assert((Const && Const->getOpcode() == TargetOpcode::G_CONSTANT) &&
"expected a G_CONSTANT on Reg");
return Const->getOperand(1).getCImm()->getValue();
}
```
Sure everything is possible, but we would have to play with the low-level Cimm details. I would like to avoid that.
https://github.com/llvm/llvm-project/pull/109047
More information about the llvm-commits
mailing list