[llvm] [DAG] visitEXTRACT_VECTOR_ELT - constant fold legal fp imm values (PR #74304)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 7 03:24:39 PST 2023


================
@@ -22243,6 +22243,19 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
   unsigned NumElts = VecVT.getVectorNumElements();
   unsigned VecEltBitWidth = VecVT.getScalarSizeInBits();
 
+  // See if the extracted element is constant, in which case fold it if its
+  // a legal fp immediate.
+  if (IndexC && ScalarVT.isFloatingPoint()) {
+    APInt EltMask = APInt::getOneBitSet(NumElts, IndexC->getZExtValue());
+    KnownBits KnownElt = DAG.computeKnownBits(VecOp, EltMask);
+    if (KnownElt.isConstant()) {
----------------
RKSimon wrote:

Its to handle bitcasts of vector data (e.g. <2 x i32>), which don't get folded away if we have multiple uses

https://github.com/llvm/llvm-project/pull/74304


More information about the llvm-commits mailing list