@@ -5548,3 +5548,151 @@ define <16 x i16> @test_signed_v16f64_v16i16(<16 x double> %f) {
55485548 %x = call <16 x i16 > @llvm.fptosi.sat.v16f64.v16i16 (<16 x double > %f )
55495549 ret <16 x i16 > %x
55505550}
5551+
5552+ define <2 x i64 > @test_signed_v2f128_v2i64 (<2 x fp128 > %f ) {
5553+ ; CHECK-SD-LABEL: test_signed_v2f128_v2i64:
5554+ ; CHECK-SD: // %bb.0:
5555+ ; CHECK-SD-NEXT: sub sp, sp, #96
5556+ ; CHECK-SD-NEXT: stp x30, x21, [sp, #64] // 16-byte Folded Spill
5557+ ; CHECK-SD-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill
5558+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 96
5559+ ; CHECK-SD-NEXT: .cfi_offset w19, -8
5560+ ; CHECK-SD-NEXT: .cfi_offset w20, -16
5561+ ; CHECK-SD-NEXT: .cfi_offset w21, -24
5562+ ; CHECK-SD-NEXT: .cfi_offset w30, -32
5563+ ; CHECK-SD-NEXT: mov v2.16b, v1.16b
5564+ ; CHECK-SD-NEXT: stp q1, q0, [sp, #32] // 32-byte Folded Spill
5565+ ; CHECK-SD-NEXT: adrp x8, .LCPI86_0
5566+ ; CHECK-SD-NEXT: ldr q1, [x8, :lo12:.LCPI86_0]
5567+ ; CHECK-SD-NEXT: mov v0.16b, v2.16b
5568+ ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
5569+ ; CHECK-SD-NEXT: bl __getf2
5570+ ; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
5571+ ; CHECK-SD-NEXT: mov w19, w0
5572+ ; CHECK-SD-NEXT: bl __fixtfdi
5573+ ; CHECK-SD-NEXT: adrp x8, .LCPI86_1
5574+ ; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
5575+ ; CHECK-SD-NEXT: cmp w19, #0
5576+ ; CHECK-SD-NEXT: ldr q1, [x8, :lo12:.LCPI86_1]
5577+ ; CHECK-SD-NEXT: mov x20, #-9223372036854775808 // =0x8000000000000000
5578+ ; CHECK-SD-NEXT: csel x19, x20, x0, lt
5579+ ; CHECK-SD-NEXT: str q1, [sp] // 16-byte Folded Spill
5580+ ; CHECK-SD-NEXT: bl __gttf2
5581+ ; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
5582+ ; CHECK-SD-NEXT: mov x21, #9223372036854775807 // =0x7fffffffffffffff
5583+ ; CHECK-SD-NEXT: cmp w0, #0
5584+ ; CHECK-SD-NEXT: csel x19, x21, x19, gt
5585+ ; CHECK-SD-NEXT: mov v1.16b, v0.16b
5586+ ; CHECK-SD-NEXT: bl __unordtf2
5587+ ; CHECK-SD-NEXT: cmp w0, #0
5588+ ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
5589+ ; CHECK-SD-NEXT: csel x8, xzr, x19, ne
5590+ ; CHECK-SD-NEXT: fmov d0, x8
5591+ ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
5592+ ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
5593+ ; CHECK-SD-NEXT: bl __getf2
5594+ ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
5595+ ; CHECK-SD-NEXT: mov w19, w0
5596+ ; CHECK-SD-NEXT: bl __fixtfdi
5597+ ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
5598+ ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
5599+ ; CHECK-SD-NEXT: cmp w19, #0
5600+ ; CHECK-SD-NEXT: csel x19, x20, x0, lt
5601+ ; CHECK-SD-NEXT: bl __gttf2
5602+ ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
5603+ ; CHECK-SD-NEXT: cmp w0, #0
5604+ ; CHECK-SD-NEXT: csel x19, x21, x19, gt
5605+ ; CHECK-SD-NEXT: mov v1.16b, v0.16b
5606+ ; CHECK-SD-NEXT: bl __unordtf2
5607+ ; CHECK-SD-NEXT: cmp w0, #0
5608+ ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
5609+ ; CHECK-SD-NEXT: csel x8, xzr, x19, ne
5610+ ; CHECK-SD-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload
5611+ ; CHECK-SD-NEXT: fmov d0, x8
5612+ ; CHECK-SD-NEXT: ldp x30, x21, [sp, #64] // 16-byte Folded Reload
5613+ ; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
5614+ ; CHECK-SD-NEXT: add sp, sp, #96
5615+ ; CHECK-SD-NEXT: ret
5616+ ;
5617+ ; CHECK-GI-LABEL: test_signed_v2f128_v2i64:
5618+ ; CHECK-GI: // %bb.0:
5619+ ; CHECK-GI-NEXT: sub sp, sp, #112
5620+ ; CHECK-GI-NEXT: stp x30, x23, [sp, #64] // 16-byte Folded Spill
5621+ ; CHECK-GI-NEXT: stp x22, x21, [sp, #80] // 16-byte Folded Spill
5622+ ; CHECK-GI-NEXT: stp x20, x19, [sp, #96] // 16-byte Folded Spill
5623+ ; CHECK-GI-NEXT: .cfi_def_cfa_offset 112
5624+ ; CHECK-GI-NEXT: .cfi_offset w19, -8
5625+ ; CHECK-GI-NEXT: .cfi_offset w20, -16
5626+ ; CHECK-GI-NEXT: .cfi_offset w21, -24
5627+ ; CHECK-GI-NEXT: .cfi_offset w22, -32
5628+ ; CHECK-GI-NEXT: .cfi_offset w23, -40
5629+ ; CHECK-GI-NEXT: .cfi_offset w30, -48
5630+ ; CHECK-GI-NEXT: adrp x8, .LCPI86_1
5631+ ; CHECK-GI-NEXT: str q1, [sp, #48] // 16-byte Folded Spill
5632+ ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI86_1]
5633+ ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
5634+ ; CHECK-GI-NEXT: mov v1.16b, v2.16b
5635+ ; CHECK-GI-NEXT: str q2, [sp, #16] // 16-byte Folded Spill
5636+ ; CHECK-GI-NEXT: bl __getf2
5637+ ; CHECK-GI-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
5638+ ; CHECK-GI-NEXT: cmp w0, #0
5639+ ; CHECK-GI-NEXT: mov x20, #-4594234569871327232 // =0xc03e000000000000
5640+ ; CHECK-GI-NEXT: fmov x8, d0
5641+ ; CHECK-GI-NEXT: csel x19, x8, xzr, lt
5642+ ; CHECK-GI-NEXT: mov x8, v0.d[1]
5643+ ; CHECK-GI-NEXT: mov v0.d[0], x19
5644+ ; CHECK-GI-NEXT: csel x21, x8, x20, lt
5645+ ; CHECK-GI-NEXT: adrp x8, .LCPI86_0
5646+ ; CHECK-GI-NEXT: mov v0.d[1], x21
5647+ ; CHECK-GI-NEXT: ldr q1, [x8, :lo12:.LCPI86_0]
5648+ ; CHECK-GI-NEXT: str q1, [sp] // 16-byte Folded Spill
5649+ ; CHECK-GI-NEXT: bl __gttf2
5650+ ; CHECK-GI-NEXT: mov x22, #-1125899906842624 // =0xfffc000000000000
5651+ ; CHECK-GI-NEXT: cmp w0, #0
5652+ ; CHECK-GI-NEXT: mov x23, #4629137466983448575 // =0x403dffffffffffff
5653+ ; CHECK-GI-NEXT: csel x8, x19, x22, gt
5654+ ; CHECK-GI-NEXT: mov v0.d[0], x8
5655+ ; CHECK-GI-NEXT: csel x8, x21, x23, gt
5656+ ; CHECK-GI-NEXT: mov v0.d[1], x8
5657+ ; CHECK-GI-NEXT: bl __fixtfdi
5658+ ; CHECK-GI-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
5659+ ; CHECK-GI-NEXT: mov x19, x0
5660+ ; CHECK-GI-NEXT: mov v1.16b, v0.16b
5661+ ; CHECK-GI-NEXT: bl __unordtf2
5662+ ; CHECK-GI-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
5663+ ; CHECK-GI-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
5664+ ; CHECK-GI-NEXT: cmp w0, #0
5665+ ; CHECK-GI-NEXT: csel x21, xzr, x19, ne
5666+ ; CHECK-GI-NEXT: bl __getf2
5667+ ; CHECK-GI-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
5668+ ; CHECK-GI-NEXT: cmp w0, #0
5669+ ; CHECK-GI-NEXT: ldr q1, [sp] // 16-byte Folded Reload
5670+ ; CHECK-GI-NEXT: fmov x8, d0
5671+ ; CHECK-GI-NEXT: csel x19, x8, xzr, lt
5672+ ; CHECK-GI-NEXT: mov x8, v0.d[1]
5673+ ; CHECK-GI-NEXT: mov v0.d[0], x19
5674+ ; CHECK-GI-NEXT: csel x20, x8, x20, lt
5675+ ; CHECK-GI-NEXT: mov v0.d[1], x20
5676+ ; CHECK-GI-NEXT: bl __gttf2
5677+ ; CHECK-GI-NEXT: cmp w0, #0
5678+ ; CHECK-GI-NEXT: csel x8, x19, x22, gt
5679+ ; CHECK-GI-NEXT: mov v0.d[0], x8
5680+ ; CHECK-GI-NEXT: csel x8, x20, x23, gt
5681+ ; CHECK-GI-NEXT: mov v0.d[1], x8
5682+ ; CHECK-GI-NEXT: bl __fixtfdi
5683+ ; CHECK-GI-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
5684+ ; CHECK-GI-NEXT: mov x19, x0
5685+ ; CHECK-GI-NEXT: mov v1.16b, v0.16b
5686+ ; CHECK-GI-NEXT: bl __unordtf2
5687+ ; CHECK-GI-NEXT: mov v0.d[0], x21
5688+ ; CHECK-GI-NEXT: cmp w0, #0
5689+ ; CHECK-GI-NEXT: csel x8, xzr, x19, ne
5690+ ; CHECK-GI-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
5691+ ; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
5692+ ; CHECK-GI-NEXT: ldp x30, x23, [sp, #64] // 16-byte Folded Reload
5693+ ; CHECK-GI-NEXT: mov v0.d[1], x8
5694+ ; CHECK-GI-NEXT: add sp, sp, #112
5695+ ; CHECK-GI-NEXT: ret
5696+ %x = call <2 x i64 > @llvm.fptosi.sat.v2f128.v2i64 (<2 x fp128 > %f )
5697+ ret <2 x i64 > %x
5698+ }
0 commit comments