[PATCH] Make sure to set trunc store action to Expand for all X86 targets.

Luqman Aden me+llvm at luqman.ca
Fri Sep 5 10:04:38 PDT 2014


Cool thanks! Could someone commit this for me?


On Sep 4, 2014, at 12:40 PM, Nadav Rotem <nrotem at apple.com> wrote:

> LGTM. 
> 
> 
>> On Sep 4, 2014, at 8:26 AM, Luqman Aden <me+llvm at luqman.ca> wrote:
>> 
>> Ping?
>> 
>> On Aug 29, 2014, at 2:56 PM, Luqman Aden <me+llvm at luqman.ca> wrote:
>> 
>>> When compiling without SSE2, isTruncStoreLegal(F64, F32) would return Legal, whereas with SSE2 it would return Expand. And since the Target doesn't seem to actually handle a truncstore for double -> float, it would just output a store of a full double in the space for a float hence overwriting other bits on the stack.
>>> 
>>> ```
>>> define void @bar() unnamed_addr {
>>> entry-block:
>>> %a = alloca double
>>> %b = alloca float
>>> 
>>> store double 3.140000e+00, double* %a
>>> %0 = load double* %a
>>> 
>>> %1 = fptrunc double %0 to float
>>> store float %1, float* %b
>>> 
>>> ret void
>>> }
>>> ```
>>> 
>>> Without SSE2:
>>> ```
>>> bar:                                    # @bar
>>>  .cfi_startproc
>>> # BB#0:                                 # %entry-block
>>>  subl    $20, %esp
>>> .Ltmp0:
>>>  .cfi_def_cfa_offset 24
>>>  movl    $1074339512, 12(%esp)   # imm = 0x40091EB8
>>>  movl    $1374389535, 8(%esp)    # imm = 0x51EB851F                 0x40091EB851EB851F (double) 3.14
>>>  movl    $1074339512, 8(%esp)    # imm = 0x40091EB8
>>>  movl    $1374389535, 4(%esp)    # imm = 0x51EB851F
>>>  addl    $20, %esp
>>>  retl
>>> ```
>>> 
>>> With SSE2:
>>> ```
>>> bar:                                    # @bar
>>>  .cfi_startproc
>>> # BB#0:                                 # %entry-block
>>>  subl    $20, %esp
>>> .Ltmp0:
>>>  .cfi_def_cfa_offset 24
>>>  movl    $1074339512, 12(%esp)   # imm = 0x40091EB8
>>>  movl    $1374389535, 8(%esp)    # imm = 0x51EB851F            0x40091EB851EB851F (double) 3.14
>>>  movl    $1078523331, 4(%esp)    # imm = 0x4048F5C3           0x4048F5C3 (float) 3.14
>>>  addl    $20, %esp
>>>  retl
>>> ```
>>> 
>>> http://reviews.llvm.org/D5125
>>> 
>>> Files:
>>> lib/Target/X86/X86ISelLowering.cpp
>>> test/CodeGen/X86/dont-trunc-store-double-to-float.ll
>>> <D5125.13098.patch>
>> 
> 





More information about the llvm-commits mailing list