[PATCH] D16663: Codegen: [PPC] Fix PPCVSXFMAMutate to handle duplicates.

Kyle Butt via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 27 17:40:21 PST 2016


iteratee created this revision.
iteratee added reviewers: hfinkel, echristo, timshen.
iteratee added a subscriber: llvm-commits.
iteratee set the repository for this revision to rL LLVM.

The purpose of PPCVSXFMAMutate is to elide copies by changing FMA forms
on PPC.

    %vreg6<def> = COPY %vreg96
    %vreg6<def,tied1> = XSMADDASP %vreg6<tied0>, %vreg5<kill>, %vreg7
    ;v6 = v6 + v5 * v7

is replaced by

    %vreg5<def,tied1> = XSMADDMSP %vreg5<tied0>, %vreg7, %vreg96
    ;v5 = v5 * v7 + v96

This was broken in the case where the target register was also used as a
multiplicand. Fix this case by checking for it and replacing both uses
with the copied register.

    %vreg6<def> = COPY %vreg96
    %vreg6<def,tied1> = XSMADDASP %vreg6<tied0>, %vreg5<kill>, %vreg6
    ;v6 = v6 + v5 * v6

is replaced by

    %vreg5<def,tied1> = XSMADDMSP %vreg5<tied0>, %vreg96, %vreg96
    ;v5 = v5 * v96 + v96


Repository:
  rL LLVM

http://reviews.llvm.org/D16663

Files:
  lib/Target/PowerPC/PPCVSXFMAMutate.cpp
  test/CodeGen/PowerPC/fma-mutate-duplicate-vreg.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D16663.46204.patch
Type: text/x-patch
Size: 6013 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160128/cabf101d/attachment.bin>


More information about the llvm-commits mailing list