Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PowerPC] Avoid unnecessary fadd for unsigned to ppcf128
Unsigned 32-bit or shorter integer to ppcf128 conversion are currently expanded as signed-to-double with an extra fadd to 'complement'. But on PowerPC we have native instruction to directly convert unsigned to double since ISA v2.06. This patch exploits it. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D89786
- Loading branch information
Showing
3 changed files
with
26 additions
and
99 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
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 |
---|---|---|
@@ -1,15 +1,21 @@ | ||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | ||
; RUN: llc -verify-machineinstrs -mcpu=pwr9 \ | ||
; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s | ||
|
||
; Ensure we don't crash by trying to convert directly from a subword load | ||
; to a ppc_fp128 as we do for conversions to f32/f64. | ||
define ppc_fp128 @test(i16* nocapture readonly %Ptr) { | ||
; CHECK-LABEL: test: | ||
; CHECK: # %bb.0: # %entry | ||
; CHECK-NEXT: lhz 3, 0(3) | ||
; CHECK-NEXT: xxlxor 2, 2, 2 | ||
; CHECK-NEXT: stw 3, -4(1) | ||
; CHECK-NEXT: addi 3, 1, -4 | ||
; CHECK-NEXT: lfiwzx 0, 0, 3 | ||
; CHECK-NEXT: xscvuxddp 1, 0 | ||
; CHECK-NEXT: blr | ||
entry: | ||
%0 = load i16, i16* %Ptr, align 2 | ||
%conv = uitofp i16 %0 to ppc_fp128 | ||
ret ppc_fp128 %conv | ||
; CHECK: lhz [[LD:[0-9]+]], 0(3) | ||
; CHECK: mtfprwa [[MV:[0-9]+]], [[LD]] | ||
; CHECK: xscvsxddp [[CONV:[0-9]+]], [[MV]] | ||
; CHECK: bl __gcc_qadd | ||
} |