[llvm] [DirectX] Infrastructure to collect shader flags for each function (PR #112967)
Justin Bogner via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 29 17:18:28 PDT 2024
================
@@ -13,36 +13,70 @@
#include "DXILShaderFlags.h"
#include "DirectX.h"
+#include "llvm/ADT/STLExtras.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Module.h"
+#include "llvm/Support/Error.h"
#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Support/raw_ostream.h"
using namespace llvm;
using namespace llvm::dxil;
-static void updateFlags(ComputedShaderFlags &Flags, const Instruction &I) {
+static void updateFlags(ComputedShaderFlags &CSF, const Instruction &I) {
Type *Ty = I.getType();
- if (Ty->isDoubleTy()) {
- Flags.Doubles = true;
+ bool DoubleTyInUse = Ty->isDoubleTy();
+ for (Value *Op : I.operands()) {
+ DoubleTyInUse |= Op->getType()->isDoubleTy();
+ }
+
+ if (DoubleTyInUse) {
+ CSF.Doubles = true;
switch (I.getOpcode()) {
case Instruction::FDiv:
case Instruction::UIToFP:
case Instruction::SIToFP:
case Instruction::FPToUI:
case Instruction::FPToSI:
- Flags.DX11_1_DoubleExtensions = true;
+ // TODO: To be set if I is a call to DXIL intrinsic DXIL::Opcode::Fma
+ CSF.DX11_1_DoubleExtensions = true;
break;
}
}
}
-ComputedShaderFlags ComputedShaderFlags::computeFlags(Module &M) {
- ComputedShaderFlags Flags;
- for (const auto &F : M)
- for (const auto &BB : F)
+static bool compareFunctions(Function const *F1, Function const *F2) {
+ return (F1->getName().compare(F2->getName()) < 0);
+}
+
+static bool compareFuncSFPairs(const FuncShaderFlagsMask &First,
+ const FuncShaderFlagsMask &Second) {
+ return compareFunctions(First.first, Second.first);
+}
----------------
bogner wrote:
Why are we sorting by function name at all here? We don't need the structure to be in a deterministic order if we're just doing lookups on it, so we should really just sort all of these by address.
https://github.com/llvm/llvm-project/pull/112967
More information about the llvm-commits
mailing list