mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
AMDGPU: Stop setting attributes based on TargetOptions
Having arbitrary passes looking at the TargetOptions is pretty messy. This was also disregarding if a function already had an explicit attribute setting on it. opt/llc now add the attributes to functions that don't specify the attribute. clang and lld do not call the function to do this, which they maybe should. This was also treating unsafe-fp-math as implying the others, and setting the other attributes based on it. This is not done anywhere else, and I'm not sure is correct based on the current description of the option bit. Effectively reverts 1d8cf2be89087a2babc1dc38b16040fad0a555e2
This commit is contained in:
parent
cba4d6f476
commit
f139bbd015
@ -61,9 +61,9 @@ FunctionPass *createSIMemoryLegalizerPass();
|
||||
FunctionPass *createSIInsertWaitcntsPass();
|
||||
FunctionPass *createSIPreAllocateWWMRegsPass();
|
||||
FunctionPass *createSIFormMemoryClausesPass();
|
||||
|
||||
FunctionPass *createSIPostRABundlerPass();
|
||||
FunctionPass *createAMDGPUSimplifyLibCallsPass(const TargetOptions &,
|
||||
const TargetMachine *);
|
||||
FunctionPass *createAMDGPUSimplifyLibCallsPass(const TargetMachine *);
|
||||
FunctionPass *createAMDGPUUseNativeCallsPass();
|
||||
FunctionPass *createAMDGPUCodeGenPreparePass();
|
||||
FunctionPass *createAMDGPUMachineCFGStructurizerPass();
|
||||
|
@ -32,7 +32,6 @@
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetOptions.h"
|
||||
#include <cmath>
|
||||
#include <vector>
|
||||
|
||||
@ -170,16 +169,13 @@ namespace {
|
||||
|
||||
class AMDGPUSimplifyLibCalls : public FunctionPass {
|
||||
|
||||
const TargetOptions Options;
|
||||
|
||||
AMDGPULibCalls Simplifier;
|
||||
|
||||
public:
|
||||
static char ID; // Pass identification
|
||||
|
||||
AMDGPUSimplifyLibCalls(const TargetOptions &Opt = TargetOptions(),
|
||||
const TargetMachine *TM = nullptr)
|
||||
: FunctionPass(ID), Options(Opt), Simplifier(TM) {
|
||||
AMDGPUSimplifyLibCalls(const TargetMachine *TM = nullptr)
|
||||
: FunctionPass(ID), Simplifier(TM) {
|
||||
initializeAMDGPUSimplifyLibCallsPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
@ -1711,35 +1707,14 @@ bool AMDGPULibCalls::evaluateCall(CallInst *aCI, FuncInfo &FInfo) {
|
||||
}
|
||||
|
||||
// Public interface to the Simplify LibCalls pass.
|
||||
FunctionPass *llvm::createAMDGPUSimplifyLibCallsPass(const TargetOptions &Opt,
|
||||
const TargetMachine *TM) {
|
||||
return new AMDGPUSimplifyLibCalls(Opt, TM);
|
||||
FunctionPass *llvm::createAMDGPUSimplifyLibCallsPass(const TargetMachine *TM) {
|
||||
return new AMDGPUSimplifyLibCalls(TM);
|
||||
}
|
||||
|
||||
FunctionPass *llvm::createAMDGPUUseNativeCallsPass() {
|
||||
return new AMDGPUUseNativeCalls();
|
||||
}
|
||||
|
||||
static bool setFastFlags(Function &F, const TargetOptions &Options) {
|
||||
AttrBuilder B;
|
||||
|
||||
if (Options.UnsafeFPMath || Options.NoInfsFPMath)
|
||||
B.addAttribute("no-infs-fp-math", "true");
|
||||
if (Options.UnsafeFPMath || Options.NoNaNsFPMath)
|
||||
B.addAttribute("no-nans-fp-math", "true");
|
||||
if (Options.UnsafeFPMath) {
|
||||
B.addAttribute("less-precise-fpmad", "true");
|
||||
B.addAttribute("unsafe-fp-math", "true");
|
||||
}
|
||||
|
||||
if (!B.hasAttributes())
|
||||
return false;
|
||||
|
||||
F.addAttributes(AttributeList::FunctionIndex, B);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AMDGPUSimplifyLibCalls::runOnFunction(Function &F) {
|
||||
if (skipFunction(F))
|
||||
return false;
|
||||
@ -1750,9 +1725,6 @@ bool AMDGPUSimplifyLibCalls::runOnFunction(Function &F) {
|
||||
LLVM_DEBUG(dbgs() << "AMDIC: process function ";
|
||||
F.printAsOperand(dbgs(), false, F.getParent()); dbgs() << '\n';);
|
||||
|
||||
if (!EnablePreLink)
|
||||
Changed |= setFastFlags(F, Options);
|
||||
|
||||
for (auto &BB : F) {
|
||||
for (BasicBlock::iterator I = BB.begin(), E = BB.end(); I != E; ) {
|
||||
// Ignore non-calls.
|
||||
|
@ -446,10 +446,9 @@ void AMDGPUTargetMachine::adjustPassManager(PassManagerBuilder &Builder) {
|
||||
PM.add(createAMDGPUAlwaysInlinePass(false));
|
||||
});
|
||||
|
||||
const auto &Opt = Options;
|
||||
Builder.addExtension(
|
||||
PassManagerBuilder::EP_EarlyAsPossible,
|
||||
[AMDGPUAA, LibCallSimplify, &Opt, this](const PassManagerBuilder &,
|
||||
[AMDGPUAA, LibCallSimplify, this](const PassManagerBuilder &,
|
||||
legacy::PassManagerBase &PM) {
|
||||
if (AMDGPUAA) {
|
||||
PM.add(createAMDGPUAAWrapperPass());
|
||||
@ -458,7 +457,7 @@ void AMDGPUTargetMachine::adjustPassManager(PassManagerBuilder &Builder) {
|
||||
PM.add(llvm::createAMDGPUPropagateAttributesEarlyPass(this));
|
||||
PM.add(llvm::createAMDGPUUseNativeCallsPass());
|
||||
if (LibCallSimplify)
|
||||
PM.add(llvm::createAMDGPUSimplifyLibCallsPass(Opt, this));
|
||||
PM.add(llvm::createAMDGPUSimplifyLibCallsPass(this));
|
||||
});
|
||||
|
||||
Builder.addExtension(
|
||||
|
@ -6,8 +6,8 @@
|
||||
; GCN: define amdgpu_kernel void @caller(float addrspace(1)* nocapture %p) local_unnamed_addr #1 {
|
||||
; GCN: %mul.i = fmul float %load, 1.500000e+01
|
||||
|
||||
; UNSAFE: attributes #0 = { norecurse nounwind readnone "less-precise-fpmad"="true" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "unsafe-fp-math"="true" }
|
||||
; UNSAFE: attributes #1 = { nofree norecurse nounwind "less-precise-fpmad"="true" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "unsafe-fp-math"="true" }
|
||||
; UNSAFE: attributes #0 = { norecurse nounwind readnone "unsafe-fp-math"="true" }
|
||||
; UNSAFE: attributes #1 = { nofree norecurse nounwind "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="true" }
|
||||
|
||||
; NOINFS: attributes #0 = { norecurse nounwind readnone "no-infs-fp-math"="true" }
|
||||
; NOINFS: attributes #1 = { nofree norecurse nounwind "less-precise-fpmad"="false" "no-infs-fp-math"="true" "no-nans-fp-math"="false" "unsafe-fp-math"="false" }
|
||||
|
Loading…
x
Reference in New Issue
Block a user