diff --git a/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h b/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h --- a/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h +++ b/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h @@ -33,6 +33,7 @@ explicit DirectXTTIImpl(const DirectXTargetMachine *TM, const Function &F) : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)), TLI(ST->getTargetLowering()) {} + unsigned getMinVectorRegisterBitWidth() const { return 32; } }; } // namespace llvm diff --git a/llvm/test/CodeGen/DirectX/min_vec_size.ll b/llvm/test/CodeGen/DirectX/min_vec_size.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/DirectX/min_vec_size.ll @@ -0,0 +1,36 @@ +; RUN: opt -S -vector-combine < %s | FileCheck %s + +target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64" +target triple = "dxil-unknown-shadermodel6.7-library" + +@A.cb. = external local_unnamed_addr constant { float, <2 x float> } + +; Make sure vec combine min vec size is 1 instead of 4 for float. +; CHECK:load <1 x float> +; CHECK-NOT:<4 x float> + +; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn +define noundef <2 x float> @"?foo@@YAT?$__vector@M$01@__clang@@XZ"() local_unnamed_addr #0 { +entry: + %0 = load float, ptr @A.cb., align 8, !tbaa !3 + %splat.splatinsert = insertelement <2 x float> poison, float %0, i64 0 + %splat.splat = shufflevector <2 x float> %splat.splatinsert, <2 x float> poison, <2 x i32> zeroinitializer + %1 = load <2 x float>, ptr getelementptr inbounds ({ float, <2 x float> }, ptr @A.cb., i32 0, i32 1), align 8, !tbaa !7 + %add = fadd <2 x float> %1, %splat.splat + ret <2 x float> %add +} + +attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone willreturn "frame-pointer"="none" "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" } + +!llvm.module.flags = !{!0} +!hlsl.cbufs = !{!1} +!llvm.ident = !{!2} + +!0 = !{i32 1, !"wchar_size", i32 4} +!1 = !{ptr @A.cb., !"A.cb.ty", i32 0, i32 -1, i32 0} +!2 = !{!"clang version 16.0.0 (https://github.com/llvm/llvm-project.git 5e0f6f41b63b362da14f0b71acc38779202dfe9c)"} +!3 = !{!4, !4, i64 0} +!4 = !{!"float", !5, i64 0} +!5 = !{!"omnipotent char", !6, i64 0} +!6 = !{!"Simple C++ TBAA"} +!7 = !{!5, !5, i64 0}