Skip to content

Commit 0dcbf14

Browse files
committed
[Hexagon][DAG][FREEZE] Fix bug 117337
Add support to lower "FREEZE a half(f16)" instruction on Hexagon.
1 parent 376dad7 commit 0dcbf14

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

llvm/lib/Target/Hexagon/HexagonISelLowering.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,8 @@ class HexagonTargetLowering : public TargetLowering {
363363
return AtomicExpansionKind::LLSC;
364364
}
365365

366+
bool softPromoteHalfType() const override { return true; }
367+
366368
private:
367369
void initializeHVXLowering();
368370
unsigned getPreferredHvxVectorAction(MVT VecTy) const;
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -march=hexagon < %s | FileCheck %s
3+
4+
define half @freeze_half_undef() nounwind {
5+
; CHECK-LABEL: freeze_half_undef:
6+
; CHECK: // %bb.0:
7+
; CHECK-NEXT: {
8+
; CHECK-NEXT: call __truncsfhf2
9+
; CHECK-NEXT: r0 = #0
10+
; CHECK-NEXT: allocframe(#0)
11+
; CHECK-NEXT: }
12+
; CHECK-NEXT: {
13+
; CHECK-NEXT: call __extendhfsf2
14+
; CHECK-NEXT: }
15+
; CHECK-NEXT: {
16+
; CHECK-NEXT: call __truncsfhf2
17+
; CHECK-NEXT: r0 = sfadd(r0,r0)
18+
; CHECK-NEXT: }
19+
; CHECK-NEXT: {
20+
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw
21+
; CHECK-NEXT: }
22+
%y1 = freeze half undef
23+
%t1 = fadd half %y1, %y1
24+
ret half %t1
25+
}
26+
27+
define half @freeze_half_poison(half %maybe.poison) {
28+
; CHECK-LABEL: freeze_half_poison:
29+
; CHECK: .cfi_startproc
30+
; CHECK-NEXT: // %bb.0:
31+
; CHECK-NEXT: .cfi_def_cfa r30, 8
32+
; CHECK-NEXT: .cfi_offset r31, -4
33+
; CHECK-NEXT: .cfi_offset r30, -8
34+
; CHECK-NEXT: {
35+
; CHECK-NEXT: call __extendhfsf2
36+
; CHECK-NEXT: allocframe(r29,#0):raw
37+
; CHECK-NEXT: }
38+
; CHECK-NEXT: {
39+
; CHECK-NEXT: call __truncsfhf2
40+
; CHECK-NEXT: r0 = sfadd(r0,r0)
41+
; CHECK-NEXT: }
42+
; CHECK-NEXT: {
43+
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw
44+
; CHECK-NEXT: }
45+
%y1 = freeze half %maybe.poison
46+
%t1 = fadd half %y1, %y1
47+
ret half %t1
48+
}

0 commit comments

Comments
 (0)