[PATCH] D104440: [X86] Fix bug when X86 stackify pass handle one ArgFPRW.
LuoYuanke via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 20 18:24:57 PDT 2021
LuoYuanke added a comment.
> Does this fix your test
>
> diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp
> index 44670a9..3e5d45b 100644
> --- a/llvm/lib/Target/X86/X86FastISel.cpp
> +++ b/llvm/lib/Target/X86/X86FastISel.cpp
> @@ -3842,6 +3842,30 @@ unsigned X86FastISel::fastMaterializeConstant(const Constant *C) {
> return X86MaterializeFP(CFP, VT);
> else if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
> return X86MaterializeGV(GV, VT);
> + else if (isa<UndefValue>(C)) {
> + unsigned Opc = 0;
> + switch (VT.SimpleTy) {
> + default:
> + break;
> + case MVT::f32:
> + if (!X86ScalarSSEf32)
> + Opc = X86::LD_Fp032;
> + break;
> + case MVT::f64:
> + if (!X86ScalarSSEf64)
> + Opc = X86::LD_Fp064;
> + break;
> + case MVT::f80:
> + Opc = X86::LD_Fp080;
> + break;
> + }
> +
> + if (Opc) {
> + Register ResultReg = createResultReg(TLI.getRegClassFor(VT));
> + BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc), ResultReg);
> + return ResultReg;
> + }
> + }
>
> return 0;
> }
Yes. It can fix. Thank you! One question, is there any other consideration to prevent undef float value in MIR? Otherwise stackify pass can support undef value by insert fld0 instruction, so that all ISel passes don't have to handle it specially.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D104440/new/
https://reviews.llvm.org/D104440
More information about the llvm-commits
mailing list