[llvm-commits] [llvm] r142432 - /llvm/trunk/lib/Target/X86/X86FastISel.cpp
Eli Friedman
eli.friedman at gmail.com
Tue Oct 18 15:30:54 PDT 2011
On Tue, Oct 18, 2011 at 3:11 PM, Lang Hames <lhames at gmail.com> wrote:
> Author: lhames
> Date: Tue Oct 18 17:11:33 2011
> New Revision: 142432
>
> URL: http://llvm.org/viewvc/llvm-project?rev=142432&view=rev
> Log:
> Teach fast isel about vector stores, and make DoSelectCall return false when it fails to emit a store. This fixes <rdar://problem/10215997>.
A testcase here would be nice.
-Eli
> Modified:
> llvm/trunk/lib/Target/X86/X86FastISel.cpp
>
> Modified: llvm/trunk/lib/Target/X86/X86FastISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FastISel.cpp?rev=142432&r1=142431&r2=142432&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86FastISel.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86FastISel.cpp Tue Oct 18 17:11:33 2011
> @@ -258,6 +258,18 @@
> Opc = X86ScalarSSEf64 ?
> (Subtarget->hasAVX() ? X86::VMOVSDmr : X86::MOVSDmr) : X86::ST_Fp64m;
> break;
> + case MVT::v4f32:
> + Opc = X86::MOVAPSmr;
> + break;
> + case MVT::v2f64:
> + Opc = X86::MOVAPDmr;
> + break;
> + case MVT::v4i32:
> + case MVT::v2i64:
> + case MVT::v8i16:
> + case MVT::v16i8:
> + Opc = X86::MOVDQAmr;
> + break;
> }
>
> addFullAddress(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt,
> @@ -671,7 +683,14 @@
> /// X86SelectStore - Select and emit code to implement store instructions.
> bool X86FastISel::X86SelectStore(const Instruction *I) {
> // Atomic stores need special handling.
> - if (cast<StoreInst>(I)->isAtomic())
> + const StoreInst *S = cast<StoreInst>(I);
> +
> + if (S->isAtomic())
> + return false;
> +
> + unsigned SABIAlignment =
> + TD.getABITypeAlignment(S->getValueOperand()->getType());
> + if (S->getAlignment() != 0 && S->getAlignment() < SABIAlignment)
> return false;
>
> MVT VT;
> @@ -1740,9 +1759,11 @@
> // If this is a really simple value, emit this with the Value* version
> // of X86FastEmitStore. If it isn't simple, we don't want to do this,
> // as it can cause us to reevaluate the argument.
> - X86FastEmitStore(ArgVT, ArgVal, AM);
> + if (!X86FastEmitStore(ArgVT, ArgVal, AM))
> + return false;
> } else {
> - X86FastEmitStore(ArgVT, Arg, AM);
> + if (!X86FastEmitStore(ArgVT, Arg, AM))
> + return false;
> }
> }
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list