[llvm] r245907 - [PowerPC] PPCVSXFMAMutate should ignore trivial-copy addends

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 26 16:21:44 PDT 2015


Hi Hal,

While there will be an rc4, I would rather not merge this as it's late
in the process and I want to keep the number of merges to a minimum.
It will be an excellent patch to get for 3.7.1.

Thanks,
Hans

On Mon, Aug 24, 2015 at 4:56 PM, Hans Wennborg <hans at chromium.org> wrote:
> Noted. :-)
>
> On Mon, Aug 24, 2015 at 4:50 PM, Hal Finkel <hfinkel at anl.gov> wrote:
>> Hi Hans,
>>
>> If there is another RC, this one too please.
>>
>> Thanks again,
>> Hal
>>
>> ----- Original Message -----
>>> From: "Hal Finkel via llvm-commits" <llvm-commits at lists.llvm.org>
>>> To: llvm-commits at lists.llvm.org
>>> Sent: Monday, August 24, 2015 6:48:28 PM
>>> Subject: [llvm] r245907 - [PowerPC] PPCVSXFMAMutate should ignore trivial-copy addends
>>>
>>> Author: hfinkel
>>> Date: Mon Aug 24 18:48:28 2015
>>> New Revision: 245907
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=245907&view=rev
>>> Log:
>>> [PowerPC] PPCVSXFMAMutate should ignore trivial-copy addends
>>>
>>> We might end up with a trivial copy as the addend, and if so, we
>>> should ignore
>>> the corresponding FMA instruction. The trivial copy can be coalesced
>>> away later,
>>> so there's nothing to do here. We should not, however, assert. Fixes
>>> PR24544.
>>>
>>> Added:
>>>     llvm/trunk/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll
>>> Modified:
>>>     llvm/trunk/lib/Target/PowerPC/PPCVSXFMAMutate.cpp
>>>
>>> Modified: llvm/trunk/lib/Target/PowerPC/PPCVSXFMAMutate.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCVSXFMAMutate.cpp?rev=245907&r1=245906&r2=245907&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Target/PowerPC/PPCVSXFMAMutate.cpp (original)
>>> +++ llvm/trunk/lib/Target/PowerPC/PPCVSXFMAMutate.cpp Mon Aug 24
>>> 18:48:28 2015
>>> @@ -186,11 +186,14 @@ protected:
>>>          if (!KilledProdOp)
>>>            continue;
>>>
>>> -        // For virtual registers, verify that the addend source
>>> register
>>> -        // is live here (as should have been assured above).
>>> -        assert((!TargetRegisterInfo::isVirtualRegister(AddendSrcReg)
>>> ||
>>> -                LIS->getInterval(AddendSrcReg).liveAt(FMAIdx)) &&
>>> -               "Addend source register is not live!");
>>> +     // If the addend copy is used only by this MI, then the addend
>>> source
>>> +     // register is likely not live here. This could be fixed (based on
>>> the
>>> +     // legality checks above, the live range for the addend source
>>> register
>>> +     // could be extended), but it seems likely that such a trivial copy
>>> can
>>> +     // be coalesced away later, and thus is not worth the effort.
>>> +     if (TargetRegisterInfo::isVirtualRegister(AddendSrcReg) &&
>>> +            !LIS->getInterval(AddendSrcReg).liveAt(FMAIdx))
>>> +          continue;
>>>
>>>          // Transform: (O2 * O3) + O1 -> (O2 * O1) + O3.
>>>
>>>
>>> Added: llvm/trunk/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll?rev=245907&view=auto
>>> ==============================================================================
>>> --- llvm/trunk/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll
>>> (added)
>>> +++ llvm/trunk/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll
>>> Mon Aug 24 18:48:28 2015
>>> @@ -0,0 +1,38 @@
>>> +; RUN: llc < %s | FileCheck %s
>>> +target datalayout = "E-m:e-i64:64-n32:64"
>>> +target triple = "powerpc64-unknown-linux-gnu"
>>> +
>>> +; Function Attrs: nounwind
>>> +define void @LSH_recall_init(float %d_min, float %W) #0 {
>>> +entry:
>>> +  br i1 undef, label %for.body.lr.ph, label %for.end
>>> +
>>> +; CHECK-LABEL: @LSH_recall_init
>>> +; CHECK: xsnmsubadp
>>> +
>>> +for.body.lr.ph:                                   ; preds = %entry
>>> +  %conv3 = fpext float %W to double
>>> +  br label %for.body
>>> +
>>> +for.body:                                         ; preds =
>>> %for.body, %for.body.lr.ph
>>> +  %div = fdiv fast float 0.000000e+00, 0.000000e+00
>>> +  %add = fadd fast float %div, %d_min
>>> +  %conv2 = fpext float %add to double
>>> +  %0 = tail call double @llvm.sqrt.f64(double %conv2)
>>> +  %div4 = fdiv fast double %conv3, %0
>>> +  %call = tail call signext i32 bitcast (i32 (...)* @p_col_helper to
>>> i32 (double)*)(double %div4) #2
>>> +  br label %for.body
>>> +
>>> +for.end:                                          ; preds = %entry
>>> +  ret void
>>> +}
>>> +
>>> +; Function Attrs: nounwind readnone
>>> +declare double @llvm.sqrt.f64(double) #1
>>> +
>>> +declare signext i32 @p_col_helper(...) #2
>>> +
>>> +attributes #0 = { nounwind "no-infs-fp-math"="true"
>>> "no-nans-fp-math"="true" "target-cpu"="pwr7" "unsafe-fp-math"="true"
>>> }
>>> +attributes #1 = { nounwind readnone }
>>> +attributes #2 = { nounwind }
>>> +
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>> --
>> Hal Finkel
>> Assistant Computational Scientist
>> Leadership Computing Facility
>> Argonne National Laboratory


More information about the llvm-commits mailing list