diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-05-04 19:14:54 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-05-04 19:14:54 +0000 |
commit | 038a0546dbbaf4d2be3417fd60e89af6c2bff4e3 (patch) | |
tree | 55f92f70c8301b393ec8a5134f972798c00a42f8 /llvm/test | |
parent | 5be171f0bd795e74dc5396d1573153fadd0eddcc (diff) | |
download | bcm5719-llvm-038a0546dbbaf4d2be3417fd60e89af6c2bff4e3.tar.gz bcm5719-llvm-038a0546dbbaf4d2be3417fd60e89af6c2bff4e3.zip |
[PPC] When restoring R30 (PIC base pointer), mark it as <def>
This happened on the PPC32/SVR4 path and was discovered when building
FreeBSD on PPC32. It was a typo-class error in the frame lowering code.
This fixes PR26519.
llvm-svn: 302183
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/PowerPC/restore-r30.ll | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/restore-r30.ll b/llvm/test/CodeGen/PowerPC/restore-r30.ll new file mode 100644 index 00000000000..216d5a70934 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/restore-r30.ll @@ -0,0 +1,30 @@ +; RUN: llc -march=ppc32 -relocation-model=pic < %s | FileCheck %s + +; The load restoring r30 at the end of the function was placed out of order +; relative to its uses as the PIC base pointer. +; This was because the r30 operand was not marked as "def" which allowed +; the post-RA scheduler to move it over other uses of r30. + +; CHECK-LABEL: fred +; CHECK: lwz 30, 24(1) +; R30 should not appear in an instruction after it's been restored. +; CHECK-NOT: 30, + +target datalayout = "E-m:e-p:32:32-i64:64-n32" +target triple = "powerpc" + +define double @fred(i64 %a) #0 { +entry: + %0 = lshr i64 %a, 32 + %conv = trunc i64 %0 to i32 + %conv1 = sitofp i32 %conv to double + %mul = fmul double %conv1, 0x41F0000000000000 + %and = and i64 %a, 4294967295 + %or = or i64 %and, 4841369599423283200 + %sub = fadd double %mul, 0xC330000000000000 + %1 = bitcast i64 %or to double + %add = fadd double %sub, %1 + ret double %add +} + +attributes #0 = { norecurse nounwind readnone "target-cpu"="ppc" "use-soft-float"="false" } |