[llvm] [MIPS] Use softPromoteHalf legalization for fp16 rather than PromoteFloat (PR #110199)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 8 01:06:11 PDT 2024
https://github.com/yingopq updated https://github.com/llvm/llvm-project/pull/110199
>From 3e5c16fdaf9c255a287433cf2ba045f89730c8e9 Mon Sep 17 00:00:00 2001
From: Ying Huang <ying.huang at oss.cipunited.com>
Date: Mon, 7 Oct 2024 23:38:13 -0400
Subject: [PATCH] [MIPS] Use softPromoteHalf legalization for fp16 rather than
PromoteFloat
Fix part of #97975.
---
llvm/lib/Target/Mips/MipsISelLowering.h | 2 +
llvm/test/CodeGen/Mips/fp16-promote.ll | 69 +++++++++++++++++++------
2 files changed, 56 insertions(+), 15 deletions(-)
diff --git a/llvm/lib/Target/Mips/MipsISelLowering.h b/llvm/lib/Target/Mips/MipsISelLowering.h
index 2b18b299180926..8033898091c756 100644
--- a/llvm/lib/Target/Mips/MipsISelLowering.h
+++ b/llvm/lib/Target/Mips/MipsISelLowering.h
@@ -365,6 +365,8 @@ class TargetRegisterClass;
return ABI.IsN64() ? Mips::A1_64 : Mips::A1;
}
+ bool softPromoteHalfType() const override { return true; }
+
bool isJumpTableRelative() const override {
return getTargetMachine().isPositionIndependent();
}
diff --git a/llvm/test/CodeGen/Mips/fp16-promote.ll b/llvm/test/CodeGen/Mips/fp16-promote.ll
index 348cf38e519743..63391bf3f95840 100644
--- a/llvm/test/CodeGen/Mips/fp16-promote.ll
+++ b/llvm/test/CodeGen/Mips/fp16-promote.ll
@@ -4,27 +4,25 @@
define void @test_fadd(ptr %p, ptr %q) nounwind {
; CHECK-LIBCALL-LABEL: test_fadd:
; CHECK-LIBCALL: # %bb.0:
-; CHECK-LIBCALL-NEXT: addiu $sp, $sp, -40
-; CHECK-LIBCALL-NEXT: sdc1 $f20, 32($sp) # 8-byte Folded Spill
-; CHECK-LIBCALL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill
-; CHECK-LIBCALL-NEXT: sw $17, 24($sp) # 4-byte Folded Spill
-; CHECK-LIBCALL-NEXT: sw $16, 20($sp) # 4-byte Folded Spill
-; CHECK-LIBCALL-NEXT: move $17, $4
-; CHECK-LIBCALL-NEXT: lhu $4, 0($4)
+; CHECK-LIBCALL-NEXT: addiu $sp, $sp, -32
+; CHECK-LIBCALL-NEXT: sdc1 $f20, 24($sp) # 8-byte Folded Spill
+; CHECK-LIBCALL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
+; CHECK-LIBCALL-NEXT: sw $16, 16($sp) # 4-byte Folded Spill
+; CHECK-LIBCALL-NEXT: move $16, $4
+; CHECK-LIBCALL-NEXT: lhu $4, 0($5)
; CHECK-LIBCALL-NEXT: jal __gnu_h2f_ieee
-; CHECK-LIBCALL-NEXT: move $16, $5
+; CHECK-LIBCALL-NEXT: nop
; CHECK-LIBCALL-NEXT: lhu $4, 0($16)
; CHECK-LIBCALL-NEXT: jal __gnu_h2f_ieee
; CHECK-LIBCALL-NEXT: mov.s $f20, $f0
; CHECK-LIBCALL-NEXT: jal __gnu_f2h_ieee
-; CHECK-LIBCALL-NEXT: add.s $f12, $f20, $f0
-; CHECK-LIBCALL-NEXT: sh $2, 0($17)
-; CHECK-LIBCALL-NEXT: lw $16, 20($sp) # 4-byte Folded Reload
-; CHECK-LIBCALL-NEXT: lw $17, 24($sp) # 4-byte Folded Reload
-; CHECK-LIBCALL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload
-; CHECK-LIBCALL-NEXT: ldc1 $f20, 32($sp) # 8-byte Folded Reload
+; CHECK-LIBCALL-NEXT: add.s $f12, $f0, $f20
+; CHECK-LIBCALL-NEXT: sh $2, 0($16)
+; CHECK-LIBCALL-NEXT: lw $16, 16($sp) # 4-byte Folded Reload
+; CHECK-LIBCALL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
+; CHECK-LIBCALL-NEXT: ldc1 $f20, 24($sp) # 8-byte Folded Reload
; CHECK-LIBCALL-NEXT: jr $ra
-; CHECK-LIBCALL-NEXT: addiu $sp, $sp, 40
+; CHECK-LIBCALL-NEXT: addiu $sp, $sp, 32
%a = load half, ptr %p, align 2
%b = load half, ptr %q, align 2
%r = fadd half %a, %b
@@ -260,3 +258,44 @@ define void @test_vec_fptrunc_double(<4 x double> %a, ptr %p) nounwind {
ret void
}
+define half @test_fadd_fadd(half %a, half %b, half %c) {
+; CHECK-LIBCALL-LABEL: test_fadd_fadd:
+; CHECK-LIBCALL: # %bb.0:
+; CHECK-LIBCALL-NEXT: addiu $sp, $sp, -40
+; CHECK-LIBCALL-NEXT: .cfi_def_cfa_offset 40
+; CHECK-LIBCALL-NEXT: sdc1 $f20, 32($sp) # 8-byte Folded Spill
+; CHECK-LIBCALL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill
+; CHECK-LIBCALL-NEXT: sw $17, 24($sp) # 4-byte Folded Spill
+; CHECK-LIBCALL-NEXT: sw $16, 20($sp) # 4-byte Folded Spill
+; CHECK-LIBCALL-NEXT: .cfi_offset 52, -8
+; CHECK-LIBCALL-NEXT: .cfi_offset 53, -4
+; CHECK-LIBCALL-NEXT: .cfi_offset 31, -12
+; CHECK-LIBCALL-NEXT: .cfi_offset 17, -16
+; CHECK-LIBCALL-NEXT: .cfi_offset 16, -20
+; CHECK-LIBCALL-NEXT: move $16, $6
+; CHECK-LIBCALL-NEXT: move $17, $4
+; CHECK-LIBCALL-NEXT: jal __gnu_h2f_ieee
+; CHECK-LIBCALL-NEXT: move $4, $5
+; CHECK-LIBCALL-NEXT: mov.s $f20, $f0
+; CHECK-LIBCALL-NEXT: jal __gnu_h2f_ieee
+; CHECK-LIBCALL-NEXT: move $4, $17
+; CHECK-LIBCALL-NEXT: jal __gnu_f2h_ieee
+; CHECK-LIBCALL-NEXT: add.s $f12, $f0, $f20
+; CHECK-LIBCALL-NEXT: jal __gnu_h2f_ieee
+; CHECK-LIBCALL-NEXT: move $4, $2
+; CHECK-LIBCALL-NEXT: mov.s $f20, $f0
+; CHECK-LIBCALL-NEXT: jal __gnu_h2f_ieee
+; CHECK-LIBCALL-NEXT: move $4, $16
+; CHECK-LIBCALL-NEXT: jal __gnu_f2h_ieee
+; CHECK-LIBCALL-NEXT: add.s $f12, $f20, $f0
+; CHECK-LIBCALL-NEXT: lw $16, 20($sp) # 4-byte Folded Reload
+; CHECK-LIBCALL-NEXT: lw $17, 24($sp) # 4-byte Folded Reload
+; CHECK-LIBCALL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload
+; CHECK-LIBCALL-NEXT: ldc1 $f20, 32($sp) # 8-byte Folded Reload
+; CHECK-LIBCALL-NEXT: jr $ra
+; CHECK-LIBCALL-NEXT: addiu $sp, $sp, 40
+ %d = fadd half %a, %b
+ %e = fadd half %d, %c
+ ret half %e
+}
+
More information about the llvm-commits
mailing list