Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/AArch64/fptoui-sat-vector.ll
Show First 20 Lines • Show All 263 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload | ; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload | ||||
; CHECK-NEXT: cmp w19, #0 | ; CHECK-NEXT: cmp w19, #0 | ||||
; CHECK-NEXT: csel w19, wzr, w0, lt | ; CHECK-NEXT: csel w19, wzr, w0, lt | ||||
; CHECK-NEXT: bl __gttf2 | ; CHECK-NEXT: bl __gttf2 | ||||
; CHECK-NEXT: cmp w0, #0 | ; CHECK-NEXT: cmp w0, #0 | ||||
; CHECK-NEXT: csinv w8, w19, wzr, le | ; CHECK-NEXT: csinv w8, w19, wzr, le | ||||
; CHECK-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload | ||||
; CHECK-NEXT: fmov s0, w8 | ; CHECK-NEXT: fmov s0, w8 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: add sp, sp, #32 | ; CHECK-NEXT: add sp, sp, #32 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <1 x i32> @llvm.fptoui.sat.v1f128.v1i32(<1 x fp128> %f) | %x = call <1 x i32> @llvm.fptoui.sat.v1f128.v1i32(<1 x fp128> %f) | ||||
ret <1 x i32> %x | ret <1 x i32> %x | ||||
} | } | ||||
define <2 x i32> @test_unsigned_v2f128_v2i32(<2 x fp128> %f) { | define <2 x i32> @test_unsigned_v2f128_v2i32(<2 x fp128> %f) { | ||||
; CHECK-LABEL: test_unsigned_v2f128_v2i32: | ; CHECK-LABEL: test_unsigned_v2f128_v2i32: | ||||
Show All 37 Lines | |||||
; CHECK-NEXT: bl __gttf2 | ; CHECK-NEXT: bl __gttf2 | ||||
; CHECK-NEXT: cmp w0, #0 | ; CHECK-NEXT: cmp w0, #0 | ||||
; CHECK-NEXT: csinv w8, w19, wzr, le | ; CHECK-NEXT: csinv w8, w19, wzr, le | ||||
; CHECK-NEXT: fmov s0, w8 | ; CHECK-NEXT: fmov s0, w8 | ||||
; CHECK-NEXT: mov v0.s[1], w20 | ; CHECK-NEXT: mov v0.s[1], w20 | ||||
; CHECK-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload | ; CHECK-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload | ||||
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0 | ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 64 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 64 | |||||
; CHECK-NEXT: add sp, sp, #96 | ; CHECK-NEXT: add sp, sp, #96 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <2 x i32> @llvm.fptoui.sat.v2f128.v2i32(<2 x fp128> %f) | %x = call <2 x i32> @llvm.fptoui.sat.v2f128.v2i32(<2 x fp128> %f) | ||||
ret <2 x i32> %x | ret <2 x i32> %x | ||||
} | } | ||||
define <3 x i32> @test_unsigned_v3f128_v3i32(<3 x fp128> %f) { | define <3 x i32> @test_unsigned_v3f128_v3i32(<3 x fp128> %f) { | ||||
; CHECK-LABEL: test_unsigned_v3f128_v3i32: | ; CHECK-LABEL: test_unsigned_v3f128_v3i32: | ||||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: csel w19, wzr, w0, lt | ; CHECK-NEXT: csel w19, wzr, w0, lt | ||||
; CHECK-NEXT: bl __gttf2 | ; CHECK-NEXT: bl __gttf2 | ||||
; CHECK-NEXT: cmp w0, #0 | ; CHECK-NEXT: cmp w0, #0 | ||||
; CHECK-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload | ; CHECK-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload | ||||
; CHECK-NEXT: csinv w8, w19, wzr, le | ; CHECK-NEXT: csinv w8, w19, wzr, le | ||||
; CHECK-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldr x30, [sp, #80] // 8-byte Folded Reload | ; CHECK-NEXT: ldr x30, [sp, #80] // 8-byte Folded Reload | ||||
; CHECK-NEXT: mov v0.s[2], w8 | ; CHECK-NEXT: mov v0.s[2], w8 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 80 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 80 | |||||
; CHECK-NEXT: add sp, sp, #112 | ; CHECK-NEXT: add sp, sp, #112 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <3 x i32> @llvm.fptoui.sat.v3f128.v3i32(<3 x fp128> %f) | %x = call <3 x i32> @llvm.fptoui.sat.v3f128.v3i32(<3 x fp128> %f) | ||||
ret <3 x i32> %x | ret <3 x i32> %x | ||||
} | } | ||||
define <4 x i32> @test_unsigned_v4f128_v4i32(<4 x fp128> %f) { | define <4 x i32> @test_unsigned_v4f128_v4i32(<4 x fp128> %f) { | ||||
; CHECK-LABEL: test_unsigned_v4f128_v4i32: | ; CHECK-LABEL: test_unsigned_v4f128_v4i32: | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: csel w19, wzr, w0, lt | ; CHECK-NEXT: csel w19, wzr, w0, lt | ||||
; CHECK-NEXT: bl __gttf2 | ; CHECK-NEXT: bl __gttf2 | ||||
; CHECK-NEXT: cmp w0, #0 | ; CHECK-NEXT: cmp w0, #0 | ||||
; CHECK-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload | ; CHECK-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload | ||||
; CHECK-NEXT: csinv w8, w19, wzr, le | ; CHECK-NEXT: csinv w8, w19, wzr, le | ||||
; CHECK-NEXT: ldp x20, x19, [sp, #112] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x20, x19, [sp, #112] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldr x30, [sp, #96] // 8-byte Folded Reload | ; CHECK-NEXT: ldr x30, [sp, #96] // 8-byte Folded Reload | ||||
; CHECK-NEXT: mov v0.s[3], w8 | ; CHECK-NEXT: mov v0.s[3], w8 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 96 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 96 | |||||
; CHECK-NEXT: add sp, sp, #128 | ; CHECK-NEXT: add sp, sp, #128 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <4 x i32> @llvm.fptoui.sat.v4f128.v4i32(<4 x fp128> %f) | %x = call <4 x i32> @llvm.fptoui.sat.v4f128.v4i32(<4 x fp128> %f) | ||||
ret <4 x i32> %x | ret <4 x i32> %x | ||||
} | } | ||||
; | ; | ||||
; FP16 to unsigned 32-bit -- Vector size variation | ; FP16 to unsigned 32-bit -- Vector size variation | ||||
▲ Show 20 Lines • Show All 461 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: fcmp s0, s9 | ; CHECK-NEXT: fcmp s0, s9 | ||||
; CHECK-NEXT: csinv x8, x8, xzr, le | ; CHECK-NEXT: csinv x8, x8, xzr, le | ||||
; CHECK-NEXT: csel x1, x21, x9, gt | ; CHECK-NEXT: csel x1, x21, x9, gt | ||||
; CHECK-NEXT: ldp x30, x21, [sp, #32] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x30, x21, [sp, #32] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ||||
; CHECK-NEXT: fmov d0, x8 | ; CHECK-NEXT: fmov d0, x8 | ||||
; CHECK-NEXT: mov v0.d[1], x1 | ; CHECK-NEXT: mov v0.d[1], x1 | ||||
; CHECK-NEXT: fmov x0, d0 | ; CHECK-NEXT: fmov x0, d0 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: add sp, sp, #64 | ; CHECK-NEXT: add sp, sp, #64 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <2 x i100> @llvm.fptoui.sat.v2f32.v2i100(<2 x float> %f) | %x = call <2 x i100> @llvm.fptoui.sat.v2f32.v2i100(<2 x float> %f) | ||||
ret <2 x i100> %x | ret <2 x i100> %x | ||||
} | } | ||||
define <2 x i128> @test_unsigned_v2f32_v2i128(<2 x float> %f) { | define <2 x i128> @test_unsigned_v2f32_v2i128(<2 x float> %f) { | ||||
; CHECK-LABEL: test_unsigned_v2f32_v2i128: | ; CHECK-LABEL: test_unsigned_v2f32_v2i128: | ||||
Show All 34 Lines | |||||
; CHECK-NEXT: fcmp s0, s9 | ; CHECK-NEXT: fcmp s0, s9 | ||||
; CHECK-NEXT: csinv x8, x8, xzr, le | ; CHECK-NEXT: csinv x8, x8, xzr, le | ||||
; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload | ; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload | ||||
; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ||||
; CHECK-NEXT: csinv x1, x9, xzr, le | ; CHECK-NEXT: csinv x1, x9, xzr, le | ||||
; CHECK-NEXT: fmov d0, x8 | ; CHECK-NEXT: fmov d0, x8 | ||||
; CHECK-NEXT: mov v0.d[1], x1 | ; CHECK-NEXT: mov v0.d[1], x1 | ||||
; CHECK-NEXT: fmov x0, d0 | ; CHECK-NEXT: fmov x0, d0 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: add sp, sp, #64 | ; CHECK-NEXT: add sp, sp, #64 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <2 x i128> @llvm.fptoui.sat.v2f32.v2i128(<2 x float> %f) | %x = call <2 x i128> @llvm.fptoui.sat.v2f32.v2i128(<2 x float> %f) | ||||
ret <2 x i128> %x | ret <2 x i128> %x | ||||
} | } | ||||
; | ; | ||||
; 2-Vector double to unsigned integer -- result size variation | ; 2-Vector double to unsigned integer -- result size variation | ||||
▲ Show 20 Lines • Show All 201 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: fcmp d0, d9 | ; CHECK-NEXT: fcmp d0, d9 | ||||
; CHECK-NEXT: csinv x8, x8, xzr, le | ; CHECK-NEXT: csinv x8, x8, xzr, le | ||||
; CHECK-NEXT: csel x1, x21, x9, gt | ; CHECK-NEXT: csel x1, x21, x9, gt | ||||
; CHECK-NEXT: ldp x30, x21, [sp, #32] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x30, x21, [sp, #32] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ||||
; CHECK-NEXT: fmov d0, x8 | ; CHECK-NEXT: fmov d0, x8 | ||||
; CHECK-NEXT: mov v0.d[1], x1 | ; CHECK-NEXT: mov v0.d[1], x1 | ||||
; CHECK-NEXT: fmov x0, d0 | ; CHECK-NEXT: fmov x0, d0 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: add sp, sp, #64 | ; CHECK-NEXT: add sp, sp, #64 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <2 x i100> @llvm.fptoui.sat.v2f64.v2i100(<2 x double> %f) | %x = call <2 x i100> @llvm.fptoui.sat.v2f64.v2i100(<2 x double> %f) | ||||
ret <2 x i100> %x | ret <2 x i100> %x | ||||
} | } | ||||
define <2 x i128> @test_unsigned_v2f64_v2i128(<2 x double> %f) { | define <2 x i128> @test_unsigned_v2f64_v2i128(<2 x double> %f) { | ||||
; CHECK-LABEL: test_unsigned_v2f64_v2i128: | ; CHECK-LABEL: test_unsigned_v2f64_v2i128: | ||||
Show All 33 Lines | |||||
; CHECK-NEXT: fcmp d0, d9 | ; CHECK-NEXT: fcmp d0, d9 | ||||
; CHECK-NEXT: csinv x8, x8, xzr, le | ; CHECK-NEXT: csinv x8, x8, xzr, le | ||||
; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload | ; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload | ||||
; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ||||
; CHECK-NEXT: csinv x1, x9, xzr, le | ; CHECK-NEXT: csinv x1, x9, xzr, le | ||||
; CHECK-NEXT: fmov d0, x8 | ; CHECK-NEXT: fmov d0, x8 | ||||
; CHECK-NEXT: mov v0.d[1], x1 | ; CHECK-NEXT: mov v0.d[1], x1 | ||||
; CHECK-NEXT: fmov x0, d0 | ; CHECK-NEXT: fmov x0, d0 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: add sp, sp, #64 | ; CHECK-NEXT: add sp, sp, #64 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <2 x i128> @llvm.fptoui.sat.v2f64.v2i128(<2 x double> %f) | %x = call <2 x i128> @llvm.fptoui.sat.v2f64.v2i128(<2 x double> %f) | ||||
ret <2 x i128> %x | ret <2 x i128> %x | ||||
} | } | ||||
; | ; | ||||
; 4-Vector half to unsigned integer -- result size variation | ; 4-Vector half to unsigned integer -- result size variation | ||||
▲ Show 20 Lines • Show All 373 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldp x30, x25, [sp, #32] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x30, x25, [sp, #32] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ||||
; CHECK-NEXT: fmov d0, x8 | ; CHECK-NEXT: fmov d0, x8 | ||||
; CHECK-NEXT: mov v0.d[1], x1 | ; CHECK-NEXT: mov v0.d[1], x1 | ||||
; CHECK-NEXT: fmov x0, d0 | ; CHECK-NEXT: fmov x0, d0 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: add sp, sp, #96 | ; CHECK-NEXT: add sp, sp, #96 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <4 x i100> @llvm.fptoui.sat.v4f16.v4i100(<4 x half> %f) | %x = call <4 x i100> @llvm.fptoui.sat.v4f16.v4i100(<4 x half> %f) | ||||
ret <4 x i100> %x | ret <4 x i100> %x | ||||
} | } | ||||
define <4 x i128> @test_unsigned_v4f16_v4i128(<4 x half> %f) { | define <4 x i128> @test_unsigned_v4f16_v4i128(<4 x half> %f) { | ||||
; CHECK-LABEL: test_unsigned_v4f16_v4i128: | ; CHECK-LABEL: test_unsigned_v4f16_v4i128: | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload | ; CHECK-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload | ||||
; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload | ; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload | ||||
; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ; CHECK-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload | ||||
; CHECK-NEXT: csinv x1, x9, xzr, le | ; CHECK-NEXT: csinv x1, x9, xzr, le | ||||
; CHECK-NEXT: fmov d0, x8 | ; CHECK-NEXT: fmov d0, x8 | ||||
; CHECK-NEXT: mov v0.d[1], x1 | ; CHECK-NEXT: mov v0.d[1], x1 | ||||
; CHECK-NEXT: fmov x0, d0 | ; CHECK-NEXT: fmov x0, d0 | ||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: .cfi_adjust_cfa_offset 16 | |||||
; CHECK-NEXT: add sp, sp, #96 | ; CHECK-NEXT: add sp, sp, #96 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%x = call <4 x i128> @llvm.fptoui.sat.v4f16.v4i128(<4 x half> %f) | %x = call <4 x i128> @llvm.fptoui.sat.v4f16.v4i128(<4 x half> %f) | ||||
ret <4 x i128> %x | ret <4 x i128> %x | ||||
} | } | ||||