mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
f09c599903
When the operand to an (s/u)int_to_fp node is an illegally typed load we cannot reuse the load address since we can not build a proper dependancy chain. The legalized loads will use a different chain output then the illegal load. If we reuse the load address then we will build a conversion node that uses the chain of the illegal load and operations which modify the memory address in the other dependancy chain can be scheduled before the floating point load which feeds the conversion. Differential Revision: https://reviews.llvm.org/D91265
29 lines
885 B
LLVM
29 lines
885 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc --verify-machineinstrs -mtriple powerpc-unknown-freebsd \
|
|
; RUN: -mcpu=pwr4 < %s | FileCheck %s
|
|
|
|
define double @postinctodbl(i64* nocapture %llp) #0 {
|
|
; CHECK-LABEL: postinctodbl:
|
|
; CHECK: # %bb.0: # %entry
|
|
; CHECK-NEXT: stwu 1, -16(1)
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: lwz 4, 4(3)
|
|
; CHECK-NEXT: stw 4, 12(1)
|
|
; CHECK-NEXT: addic 4, 4, 1
|
|
; CHECK-NEXT: lwz 5, 0(3)
|
|
; CHECK-NEXT: stw 5, 8(1)
|
|
; CHECK-NEXT: addze 5, 5
|
|
; CHECK-NEXT: lfd 0, 8(1)
|
|
; CHECK-NEXT: stw 5, 0(3)
|
|
; CHECK-NEXT: fcfid 1, 0
|
|
; CHECK-NEXT: stw 4, 4(3)
|
|
; CHECK-NEXT: addi 1, 1, 16
|
|
; CHECK-NEXT: blr
|
|
entry:
|
|
%0 = load i64, i64* %llp, align 8
|
|
%inc = add nsw i64 %0, 1
|
|
store i64 %inc, i64* %llp, align 8
|
|
%conv = sitofp i64 %0 to double
|
|
ret double %conv
|
|
}
|