Skip to content

Commit

Permalink
[PowerPC] Folding XForm to DForm loads requires alignment for some DF…
Browse files Browse the repository at this point in the history
…orm loads.

Going from XForm Load to DSForm Load requires that the immediate be 4 byte
aligned.
If we are not aligned we must leave the load as LDX (XForm).
This bug is causing a compile-time failure in the benchmark h264ref.

Differential Revision: https://reviews.llvm.org/D51988

llvm-svn: 343525
  • Loading branch information
stefanp-ibm committed Oct 1, 2018
1 parent 22d4948 commit 5d32a86
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
8 changes: 8 additions & 0 deletions llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
Expand Up @@ -3150,6 +3150,14 @@ bool PPCInstrInfo::isImmElgibleForForwarding(const MachineOperand &ImmMO,
III.TruncateImmTo || III.ImmWidth != 16)
return false;

// Going from XForm to DForm loads means that the displacement needs to be
// not just an immediate but also a multiple of 4, or 16 depending on the
// load. A DForm load cannot be represented if it is a multiple of say 2.
// XForm loads do not have this restriction.
if (ImmMO.isGlobal() &&
ImmMO.getGlobal()->getAlignment() < III.ImmMustBeMultipleOf)
return false;

return true;
}

Expand Down
16 changes: 16 additions & 0 deletions llvm/test/CodeGen/PowerPC/p9-dform-load-alignment.ll
@@ -0,0 +1,16 @@
; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \
; RUN: -verify-machineinstrs -ppc-asm-full-reg-names \
; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s

@best8x8mode = external dso_local local_unnamed_addr global [4 x i16], align 2
define dso_local void @AlignDSForm() local_unnamed_addr {
entry:
%0 = load <4 x i16>, <4 x i16>* bitcast ([4 x i16]* @best8x8mode to <4 x i16>*), align 2
store <4 x i16> %0, <4 x i16>* undef, align 4
unreachable
; CHECK-LABEL: AlignDSForm
; CHECK: addis r{{[0-9]+}}, r{{[0-9]+}}, best8x8mode@toc@ha
; CHECK: addi r[[REG:[0-9]+]], r{{[0-9]+}}, best8x8mode@toc@l
; CHECK: ldx r{{[0-9]+}}, 0, r[[REG]]
}

0 comments on commit 5d32a86

Please sign in to comment.