[llvm-dev] rL296252 Made large integer operation codegen significantly worse.

Craig Topper via llvm-dev llvm-dev at lists.llvm.org
Mon Feb 27 22:05:54 PST 2017


For this code the isel ends up creating adc with memory load and store, and
then a separate adc with the same load, but no store. This means isel is
now replicating loads which seems wrong. I suspect something is going wrong
in merging input chains?

  t0: ch = EntryToken
  t2: i64,ch = CopyFromReg t0, Register:i64 %vreg0
  t4: i64,ch = CopyFromReg t0, Register:i64 %vreg1
  t71: i64 = add t2, Constant:i64<24>
  t25: i64 = add t2, Constant:i64<8>
  t24: i64,ch = load<LD8[%p]> t0, t2, undef:i64
  t16: i64 = add t2, Constant:i64<16>
  t38: i64,ch = load<LD8[%q]> t0, t4, undef:i64
  t22: i64,ch = load<LD8[%p+24]> t0, t71, undef:i64
  t26: i64,ch = load<LD8[%p+8]> t0, t25, undef:i64
  t19: i64,ch = load<LD8[%p+16]> t0, t16, undef:i64
    t69: i64 = add t4, Constant:i64<24>
  t36: i64,ch = load<LD8[%q+24]> t0, t69, undef:i64
    t39: i64 = add t4, Constant:i64<8>
  t40: i64,ch = load<LD8[%q+8]> t0, t39, undef:i64
    t29: i64 = add t4, Constant:i64<16>
  t34: i64,ch = load<LD8[%q+16]> t0, t29, undef:i64
  t79: i64,i32 = X86ISD::ADC t19, t34, t80:1
  t80: i64,i32 = X86ISD::ADC t26, t40, t81:1
  t81: i64,i32 = X86ISD::ADD t24, t38
        t72: ch = TokenFactor t22:1, t38:1, t40:1, t34:1, t36:1
        t78: i64,i32 = X86ISD::ADC t22, t36, t79:1
      t73: ch = store<ST8[%p+24]> t72, t78, t71, undef:i64
        t82: ch = TokenFactor t19:1, t38:1, t40:1, t34:1, t36:1
      t83: ch = store<ST8[%p+16]> t82, t79, t16, undef:i64
        t87: ch = TokenFactor t26:1, t38:1, t40:1, t34:1, t36:1
      t88: ch = store<ST8[%p+8]> t87, t80, t25, undef:i64
        t92: ch = TokenFactor t24:1, t38:1, t40:1, t34:1, t36:1
      t93: ch = store<ST8[%p]> t92, t81, t2, undef:i64
    t96: ch = TokenFactor t73, t83, t88, t93
  t13: ch = X86ISD::RET_FLAG t96, TargetConstant:i32<0>

~Craig

On Mon, Feb 27, 2017 at 9:19 PM, Craig Topper <craig.topper at gmail.com>
wrote:

> Another problem seems to be that despite the fact we are making store
> instructions that produce flags, we aren't transfering that flag production
> to the instructions that need the flags. So we replicate all of the add
> operations.
>
> ~Craig
>
> On Mon, Feb 27, 2017 at 9:02 PM, Craig Topper <craig.topper at gmail.com>
> wrote:
>
>> I see we're missing an isel pattern for add producing carry and doing a
>> memory RMW. I'm going to see if adding that helps anything.
>>
>> ~Craig
>>
>> On Mon, Feb 27, 2017 at 8:47 PM, Nirav Davé via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> Yes. I'm seeing that as well. Not clear what's going on.
>>>
>>> In any case it looks to be unrelated to the alias analysis so barring
>>> concerns, I'm going to recommit the patch in the morning and let others
>>> take a look at this.
>>>
>>> -Nirav
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170227/546e653e/attachment-0001.html>


More information about the llvm-dev mailing list