[llvm] [LLVM][IR] Add support for vector ConstantInt/FP to ConstandFolding:FoldBitCast. (PR #117163)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 21 06:05:53 PST 2024
https://github.com/paulwalker-arm created https://github.com/llvm/llvm-project/pull/117163
None
>From e0858b16b48e0392217d4128fde1c119f3b71c60 Mon Sep 17 00:00:00 2001
From: Paul Walker <paul.walker at arm.com>
Date: Tue, 19 Nov 2024 16:23:28 +0000
Subject: [PATCH] [LLVM][IR] Add support for vector ConstantInt/FP to
ConstandFolding:FoldBitCast.
---
llvm/lib/Analysis/ConstantFolding.cpp | 8 +++++++-
llvm/test/Transforms/InstCombine/cast.ll | 2 ++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp
index 1971c28fc4c4de..f66078e0aa545d 100644
--- a/llvm/lib/Analysis/ConstantFolding.cpp
+++ b/llvm/lib/Analysis/ConstantFolding.cpp
@@ -151,8 +151,14 @@ Constant *FoldBitCast(Constant *C, Type *DestTy, const DataLayout &DL) {
return FoldBitCast(ConstantVector::get(Ops), DestTy, DL);
}
+ // Some of what follows may extend to cover scalable vectors but the current
+ // implementation is fixed length specific.
+ if (!isa<FixedVectorType>(C->getType()))
+ return ConstantExpr::getBitCast(C, DestTy);
+
// If this is a bitcast from constant vector -> vector, fold it.
- if (!isa<ConstantDataVector>(C) && !isa<ConstantVector>(C))
+ if (!isa<ConstantDataVector>(C) && !isa<ConstantVector>(C) &&
+ !isa<ConstantInt>(C) && !isa<ConstantFP>(C))
return ConstantExpr::getBitCast(C, DestTy);
// If the element types match, IR can fold it.
diff --git a/llvm/test/Transforms/InstCombine/cast.ll b/llvm/test/Transforms/InstCombine/cast.ll
index ca748a9483e9b2..0f957e22ad17bc 100644
--- a/llvm/test/Transforms/InstCombine/cast.ll
+++ b/llvm/test/Transforms/InstCombine/cast.ll
@@ -2,6 +2,8 @@
; Tests to make sure elimination of casts is working correctly
; RUN: opt < %s -passes=instcombine -S -data-layout="E-p:64:64:64-p1:32:32:32-p2:64:64:64-p3:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128-n8:16:32:64" | FileCheck %s --check-prefixes=ALL,BE
; RUN: opt < %s -passes=instcombine -S -data-layout="e-p:64:64:64-p1:32:32:32-p2:64:64:64-p3:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128-n8:16:32:64" | FileCheck %s --check-prefixes=ALL,LE
+; RUN: opt < %s -passes=instcombine -S -data-layout="E-p:64:64:64-p1:32:32:32-p2:64:64:64-p3:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128-n8:16:32:64" -use-constant-fp-for-fixed-length-splat -use-constant-int-for-fixed-length-splat | FileCheck %s --check-prefixes=ALL,BE
+; RUN: opt < %s -passes=instcombine -S -data-layout="e-p:64:64:64-p1:32:32:32-p2:64:64:64-p3:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128-n8:16:32:64" -use-constant-fp-for-fixed-length-splat -use-constant-int-for-fixed-length-splat | FileCheck %s --check-prefixes=ALL,LE
declare void @use_i32(i32)
declare void @use_v2i32(<2 x i32>)
More information about the llvm-commits
mailing list