Skip to content

Commit eb4a91d

Browse files
committed
[AArch64][GlobalISel] Add frem fp128 libcall legalization.
Like other operations, these need to be marked as libcall.
1 parent 8ecbad7 commit eb4a91d

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
275275
.lowerFor({s16, v4s16, v8s16});
276276

277277
getActionDefinitionsBuilder(G_FREM)
278-
.libcallFor({s32, s64})
278+
.libcallFor({s32, s64, s128})
279279
.minScalar(0, s32)
280280
.scalarize(0);
281281

llvm/test/CodeGen/AArch64/frem.ll

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,29 @@ entry:
3939
ret half %c
4040
}
4141

42+
define fp128 @frem_fp128(fp128 %a, fp128 %b) {
43+
; CHECK-LABEL: frem_fp128:
44+
; CHECK: // %bb.0: // %entry
45+
; CHECK-NEXT: b fmodl
46+
entry:
47+
%c = frem fp128 %a, %b
48+
ret fp128 %c
49+
}
50+
51+
define <1 x double> @frem_v1f64(<1 x double> %a, <1 x double> %b) {
52+
; CHECK-LABEL: frem_v1f64:
53+
; CHECK: // %bb.0: // %entry
54+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
55+
; CHECK-NEXT: .cfi_def_cfa_offset 16
56+
; CHECK-NEXT: .cfi_offset w30, -16
57+
; CHECK-NEXT: bl fmod
58+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
59+
; CHECK-NEXT: ret
60+
entry:
61+
%c = frem <1 x double> %a, %b
62+
ret <1 x double> %c
63+
}
64+
4265
define <2 x double> @frem_v2f64(<2 x double> %a, <2 x double> %b) {
4366
; CHECK-SD-LABEL: frem_v2f64:
4467
; CHECK-SD: // %bb.0: // %entry
@@ -1577,3 +1600,44 @@ entry:
15771600
%c = frem <16 x half> %a, %b
15781601
ret <16 x half> %c
15791602
}
1603+
1604+
define <2 x fp128> @frem_v2fp128(<2 x fp128> %a, <2 x fp128> %b) {
1605+
; CHECK-SD-LABEL: frem_v2fp128:
1606+
; CHECK-SD: // %bb.0: // %entry
1607+
; CHECK-SD-NEXT: sub sp, sp, #64
1608+
; CHECK-SD-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
1609+
; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
1610+
; CHECK-SD-NEXT: .cfi_offset w30, -16
1611+
; CHECK-SD-NEXT: stp q1, q3, [sp, #16] // 32-byte Folded Spill
1612+
; CHECK-SD-NEXT: mov v1.16b, v2.16b
1613+
; CHECK-SD-NEXT: bl fmodl
1614+
; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
1615+
; CHECK-SD-NEXT: ldp q0, q1, [sp, #16] // 32-byte Folded Reload
1616+
; CHECK-SD-NEXT: bl fmodl
1617+
; CHECK-SD-NEXT: mov v1.16b, v0.16b
1618+
; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1619+
; CHECK-SD-NEXT: ldr x30, [sp, #48] // 8-byte Folded Reload
1620+
; CHECK-SD-NEXT: add sp, sp, #64
1621+
; CHECK-SD-NEXT: ret
1622+
;
1623+
; CHECK-GI-LABEL: frem_v2fp128:
1624+
; CHECK-GI: // %bb.0: // %entry
1625+
; CHECK-GI-NEXT: sub sp, sp, #64
1626+
; CHECK-GI-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
1627+
; CHECK-GI-NEXT: .cfi_def_cfa_offset 64
1628+
; CHECK-GI-NEXT: .cfi_offset w30, -16
1629+
; CHECK-GI-NEXT: stp q3, q1, [sp, #16] // 32-byte Folded Spill
1630+
; CHECK-GI-NEXT: mov v1.16b, v2.16b
1631+
; CHECK-GI-NEXT: bl fmodl
1632+
; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
1633+
; CHECK-GI-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
1634+
; CHECK-GI-NEXT: bl fmodl
1635+
; CHECK-GI-NEXT: mov v1.16b, v0.16b
1636+
; CHECK-GI-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1637+
; CHECK-GI-NEXT: ldr x30, [sp, #48] // 8-byte Folded Reload
1638+
; CHECK-GI-NEXT: add sp, sp, #64
1639+
; CHECK-GI-NEXT: ret
1640+
entry:
1641+
%c = frem <2 x fp128> %a, %b
1642+
ret <2 x fp128> %c
1643+
}

0 commit comments

Comments
 (0)