1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 12:12:47 +01:00
llvm-mirror/test/CodeGen/PowerPC/cvt_i64_to_fp.ll
Sean Fertile f09c599903 [PowerPC] Don't reuse an illegal typed load for int_to_fp conversion.
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
2020-11-24 15:45:33 -05:00

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
}