forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302183 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Krzysztof Parzyszek
committed
May 4, 2017
1 parent
b1cbece
commit 8175a1d
Showing
2 changed files
with
31 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" } |