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

Hal Finkel via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 24 16:50:29 PDT 2015


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