[llvm-commits] [llvm] r142432 - /llvm/trunk/lib/Target/X86/X86FastISel.cpp

Lang Hames lhames at apple.com
Tue Oct 18 16:55:26 PDT 2011


Good call. Test case committed in r142462. Thanks Eli.

- Lang.

On Oct 18, 2011, at 3:30 PM, Eli Friedman wrote:

> 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
>> 
> 
> _______________________________________________
> 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