[llvm] [Scalarizer][DirectX] Add support for scalarization of Target intrinsics (PR #108776)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 15 12:03:47 PDT 2024
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff 8965795ed8bdea31e25463eceb9eb20c081dd50d 415244c90e009fd3899940c9ce335fb717b6eac9 --extensions h,cpp -- llvm/lib/Target/DirectX/DirectXTargetTransformInfo.cpp llvm/include/llvm/Analysis/TargetTransformInfo.h llvm/include/llvm/Analysis/TargetTransformInfoImpl.h llvm/include/llvm/CodeGen/BasicTTIImpl.h llvm/lib/Analysis/TargetTransformInfo.cpp llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h llvm/lib/Transforms/Scalar/Scalarizer.cpp
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h
index f47221ebfc..3411163549 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfo.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h
@@ -1930,7 +1930,7 @@ public:
virtual bool shouldBuildLookupTablesForConstant(Constant *C) = 0;
virtual bool shouldBuildRelLookupTables() = 0;
virtual bool useColdCCForColdCall(Function &F) = 0;
- virtual bool isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) = 0;
+ virtual bool isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) = 0;
virtual InstructionCost getScalarizationOverhead(VectorType *Ty,
const APInt &DemandedElts,
bool Insert, bool Extract,
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
index 757a63d485..2819af30cd 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -373,8 +373,10 @@ public:
bool useColdCCForColdCall(Function &F) const { return false; }
- bool isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) const { return false; }
-
+ bool isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) const {
+ return false;
+ }
+
InstructionCost getScalarizationOverhead(VectorType *Ty,
const APInt &DemandedElts,
bool Insert, bool Extract,
diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
index 2d82973df3..9640878f60 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -788,7 +788,7 @@ public:
return Cost;
}
-
+
bool isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) const {
return false;
}
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp
index 8736d63c26..67b626f300 100644
--- a/llvm/lib/Analysis/TargetTransformInfo.cpp
+++ b/llvm/lib/Analysis/TargetTransformInfo.cpp
@@ -587,7 +587,8 @@ bool TargetTransformInfo::useColdCCForColdCall(Function &F) const {
return TTIImpl->useColdCCForColdCall(F);
}
-bool TargetTransformInfo::isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) const {
+bool TargetTransformInfo::isTargetIntrinsicTriviallyScalarizable(
+ Intrinsic::ID ID) const {
return TTIImpl->isTargetIntrinsicTriviallyScalarizable(ID);
}
diff --git a/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.cpp b/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.cpp
index 8ff8f49270..1a59f04b21 100644
--- a/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.cpp
+++ b/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.cpp
@@ -1,4 +1,5 @@
-//===- DirectXTargetTransformInfo.cpp - DirectX TTI ---------------*- C++ -*-===//
+//===- DirectXTargetTransformInfo.cpp - DirectX TTI ---------------*- C++
+//-*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -12,12 +13,13 @@
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsDirectX.h"
- bool llvm::DirectXTTIImpl::isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) const {
- switch (ID) {
- case Intrinsic::dx_frac:
- case Intrinsic::dx_rsqrt:
- return true;
- default:
- return false;
- }
+bool llvm::DirectXTTIImpl::isTargetIntrinsicTriviallyScalarizable(
+ Intrinsic::ID ID) const {
+ switch (ID) {
+ case Intrinsic::dx_frac:
+ case Intrinsic::dx_rsqrt:
+ return true;
+ default:
+ return false;
+ }
}
diff --git a/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h b/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h
index 3d74754ff5..48414549f8 100644
--- a/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h
+++ b/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.h
@@ -34,7 +34,7 @@ public:
: BaseT(TM, F.getDataLayout()), ST(TM->getSubtargetImpl(F)),
TLI(ST->getTargetLowering()) {}
unsigned getMinVectorRegisterBitWidth() const { return 32; }
- bool isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) const;
+ bool isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) const;
};
} // namespace llvm
diff --git a/llvm/lib/Transforms/Scalar/Scalarizer.cpp b/llvm/lib/Transforms/Scalar/Scalarizer.cpp
index 44ef7639e8..e4ec09aa62 100644
--- a/llvm/lib/Transforms/Scalar/Scalarizer.cpp
+++ b/llvm/lib/Transforms/Scalar/Scalarizer.cpp
@@ -283,10 +283,11 @@ T getWithDefaultOverride(const cl::opt<T> &ClOption,
class ScalarizerVisitor : public InstVisitor<ScalarizerVisitor, bool> {
public:
- ScalarizerVisitor(DominatorTree *DT, const TargetTransformInfo *TTI, ScalarizerPassOptions Options)
+ ScalarizerVisitor(DominatorTree *DT, const TargetTransformInfo *TTI,
+ ScalarizerPassOptions Options)
: DT(DT), TTI(TTI), ScalarizeVariableInsertExtract(getWithDefaultOverride(
- ClScalarizeVariableInsertExtract,
- Options.ScalarizeVariableInsertExtract)),
+ ClScalarizeVariableInsertExtract,
+ Options.ScalarizeVariableInsertExtract)),
ScalarizeLoadStore(getWithDefaultOverride(ClScalarizeLoadStore,
Options.ScalarizeLoadStore)),
ScalarizeMinBits(getWithDefaultOverride(ClScalarizeMinBits,
@@ -341,7 +342,6 @@ private:
DominatorTree *DT;
const TargetTransformInfo *TTI;
-
const bool ScalarizeVariableInsertExtract;
const bool ScalarizeLoadStore;
const unsigned ScalarizeMinBits;
@@ -452,7 +452,8 @@ bool ScalarizerLegacyPass::runOnFunction(Function &F) {
return false;
DominatorTree *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
- const TargetTransformInfo *TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
+ const TargetTransformInfo *TTI =
+ &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
ScalarizerVisitor Impl(DT, TTI, Options);
return Impl.visit(F);
}
@@ -699,7 +700,8 @@ bool ScalarizerVisitor::splitBinary(Instruction &I, const Splitter &Split) {
bool ScalarizerVisitor::isTriviallyScalarizable(Intrinsic::ID ID) {
- return TTI->isTargetIntrinsicTriviallyScalarizable(ID) || isTriviallyVectorizable(ID);
+ return TTI->isTargetIntrinsicTriviallyScalarizable(ID) ||
+ isTriviallyVectorizable(ID);
}
/// If a call to a vector typed intrinsic function, split into a scalar call per
@@ -714,7 +716,7 @@ bool ScalarizerVisitor::splitCall(CallInst &CI) {
return false;
Intrinsic::ID ID = F->getIntrinsicID();
-
+
if (ID == Intrinsic::not_intrinsic || !isTriviallyScalarizable(ID))
return false;
``````````
</details>
https://github.com/llvm/llvm-project/pull/108776
More information about the llvm-commits
mailing list