20 changes: 8 additions & 12 deletions llvm/test/CodeGen/AArch64/fptosi-sat-scalar.ll
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,10 @@ define i100 @test_signed_i100_f32(float %f) nounwind {
; CHECK-NEXT: str x30, [sp, #8] // 8-byte Folded Spill
; CHECK-NEXT: fmov s8, s0
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-251658240
; CHECK-NEXT: movi v0.2s, #241, lsl #24
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: mov x10, #34359738367
; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Folded Reload
; CHECK-NEXT: fmov s0, w8
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: fcmp s8, s0
; CHECK-NEXT: fmov s0, w8
; CHECK-NEXT: mov x8, #-34359738368
Expand All @@ -160,11 +159,10 @@ define i128 @test_signed_i128_f32(float %f) nounwind {
; CHECK-NEXT: str x30, [sp, #8] // 8-byte Folded Spill
; CHECK-NEXT: fmov s8, s0
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-16777216
; CHECK-NEXT: movi v0.2s, #255, lsl #24
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: mov x10, #9223372036854775807
; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Folded Reload
; CHECK-NEXT: fmov s0, w8
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: fcmp s8, s0
; CHECK-NEXT: fmov s0, w8
; CHECK-NEXT: mov x8, #-9223372036854775808
Expand Down Expand Up @@ -575,11 +573,10 @@ define i100 @test_signed_i100_f16(half %f) nounwind {
; CHECK-NEXT: str x30, [sp, #8] // 8-byte Folded Spill
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-251658240
; CHECK-NEXT: movi v0.2s, #241, lsl #24
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: mov x10, #34359738367
; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Folded Reload
; CHECK-NEXT: fmov s0, w8
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: fcmp s8, s0
; CHECK-NEXT: fmov s0, w8
; CHECK-NEXT: mov x8, #-34359738368
Expand All @@ -605,11 +602,10 @@ define i128 @test_signed_i128_f16(half %f) nounwind {
; CHECK-NEXT: str x30, [sp, #8] // 8-byte Folded Spill
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-16777216
; CHECK-NEXT: movi v0.2s, #255, lsl #24
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: mov x10, #9223372036854775807
; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Folded Reload
; CHECK-NEXT: fmov s0, w8
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: fcmp s8, s0
; CHECK-NEXT: fmov s0, w8
; CHECK-NEXT: mov x8, #-9223372036854775808
Expand Down
76 changes: 34 additions & 42 deletions llvm/test/CodeGen/AArch64/fptosi-sat-vector.ll
Original file line number Diff line number Diff line change
Expand Up @@ -827,15 +827,14 @@ define <2 x i100> @test_signed_v2f32_v2i100(<2 x float> %f) {
; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-251658240
; CHECK-NEXT: movi v9.2s, #241, lsl #24
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: mov x21, #-34359738368
; CHECK-NEXT: mov x22, #34359738367
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
; CHECK-NEXT: fmov s9, w8
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: csel x8, xzr, x0, lt
; CHECK-NEXT: csel x9, x21, x1, lt
; CHECK-NEXT: fcmp s8, s10
Expand Down Expand Up @@ -894,15 +893,14 @@ define <2 x i128> @test_signed_v2f32_v2i128(<2 x float> %f) {
; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-16777216
; CHECK-NEXT: movi v9.2s, #255, lsl #24
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: mov x21, #-9223372036854775808
; CHECK-NEXT: mov x22, #9223372036854775807
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
; CHECK-NEXT: fmov s9, w8
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: csel x8, xzr, x0, lt
; CHECK-NEXT: csel x9, x21, x1, lt
; CHECK-NEXT: fcmp s8, s10
Expand Down Expand Up @@ -1106,20 +1104,19 @@ define <4 x i100> @test_signed_v4f32_v4i100(<4 x float> %f) {
; CHECK-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-251658240
; CHECK-NEXT: movi v9.2s, #241, lsl #24
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: mov x25, #-34359738368
; CHECK-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
; CHECK-NEXT: mov x26, #34359738367
; CHECK-NEXT: fmov s9, w8
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
; CHECK-NEXT: csel x8, xzr, x0, lt
; CHECK-NEXT: csel x9, x25, x1, lt
; CHECK-NEXT: fcmp s8, s10
; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
; CHECK-NEXT: csel x9, x26, x9, gt
; CHECK-NEXT: csinv x8, x8, xzr, le
; CHECK-NEXT: fcmp s8, s8
Expand Down Expand Up @@ -1211,20 +1208,19 @@ define <4 x i128> @test_signed_v4f32_v4i128(<4 x float> %f) {
; CHECK-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-16777216
; CHECK-NEXT: movi v9.2s, #255, lsl #24
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: mov x25, #-9223372036854775808
; CHECK-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
; CHECK-NEXT: mov x26, #9223372036854775807
; CHECK-NEXT: fmov s9, w8
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
; CHECK-NEXT: csel x8, xzr, x0, lt
; CHECK-NEXT: csel x9, x25, x1, lt
; CHECK-NEXT: fcmp s8, s10
; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
; CHECK-NEXT: csel x9, x26, x9, gt
; CHECK-NEXT: csinv x8, x8, xzr, le
; CHECK-NEXT: fcmp s8, s8
Expand Down Expand Up @@ -1862,15 +1858,14 @@ define <4 x i100> @test_signed_v4f16_v4i100(<4 x half> %f) {
; CHECK-NEXT: fcvt s8, h1
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-251658240
; CHECK-NEXT: movi v9.2s, #241, lsl #24
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
; CHECK-NEXT: mov x25, #-34359738368
; CHECK-NEXT: mov x26, #34359738367
; CHECK-NEXT: fmov s9, w8
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: mov h0, v0.h[2]
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: mov h0, v0.h[2]
; CHECK-NEXT: csel x8, xzr, x0, lt
; CHECK-NEXT: csel x9, x25, x1, lt
; CHECK-NEXT: fcmp s8, s10
Expand Down Expand Up @@ -1970,15 +1965,14 @@ define <4 x i128> @test_signed_v4f16_v4i128(<4 x half> %f) {
; CHECK-NEXT: fcvt s8, h1
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-16777216
; CHECK-NEXT: movi v9.2s, #255, lsl #24
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
; CHECK-NEXT: mov x25, #-9223372036854775808
; CHECK-NEXT: mov x26, #9223372036854775807
; CHECK-NEXT: fmov s9, w8
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: mov h0, v0.h[2]
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: fcmp s8, s9
; CHECK-NEXT: mov h0, v0.h[2]
; CHECK-NEXT: csel x8, xzr, x0, lt
; CHECK-NEXT: csel x9, x25, x1, lt
; CHECK-NEXT: fcmp s8, s10
Expand Down Expand Up @@ -2618,15 +2612,14 @@ define <8 x i100> @test_signed_v8f16_v8i100(<8 x half> %f) {
; CHECK-NEXT: fcvt s8, h0
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-251658240
; CHECK-NEXT: movi v10.2s, #241, lsl #24
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
; CHECK-NEXT: mov x25, #-34359738368
; CHECK-NEXT: mov x23, #34359738367
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: mov w8, #1895825407
; CHECK-NEXT: mov h0, v0.h[3]
; CHECK-NEXT: fcmp s8, s10
; CHECK-NEXT: fmov s9, w8
; CHECK-NEXT: fcmp s8, s10
; CHECK-NEXT: mov h0, v0.h[3]
; CHECK-NEXT: csel x8, xzr, x0, lt
; CHECK-NEXT: csel x9, x25, x1, lt
; CHECK-NEXT: fcmp s8, s9
Expand Down Expand Up @@ -2827,15 +2820,14 @@ define <8 x i128> @test_signed_v8f16_v8i128(<8 x half> %f) {
; CHECK-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
; CHECK-NEXT: fmov s0, s8
; CHECK-NEXT: bl __fixsfti
; CHECK-NEXT: mov w8, #-16777216
; CHECK-NEXT: movi v10.2s, #255, lsl #24
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
; CHECK-NEXT: mov x21, #-9223372036854775808
; CHECK-NEXT: mov x22, #9223372036854775807
; CHECK-NEXT: fmov s10, w8
; CHECK-NEXT: mov w8, #2130706431
; CHECK-NEXT: mov h0, v0.h[1]
; CHECK-NEXT: fcmp s8, s10
; CHECK-NEXT: fmov s9, w8
; CHECK-NEXT: fcmp s8, s10
; CHECK-NEXT: mov h0, v0.h[1]
; CHECK-NEXT: csel x8, xzr, x0, lt
; CHECK-NEXT: csel x9, x21, x1, lt
; CHECK-NEXT: fcmp s8, s9
Expand Down
33 changes: 33 additions & 0 deletions llvm/test/CodeGen/AArch64/remat-const-float-simd.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -verify-machineinstrs -mattr=+neon | FileCheck %s --check-prefixes=CHECK,CHECK-NEON
; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -verify-machineinstrs -mattr=-neon | FileCheck %s --check-prefixes=CHECK,CHECK-SCALAR

; Check that big fp constants can be rematerialized with movi
target triple = "aarch64-unknown-linux-gnu"

; float foo(void) { return float(2147483648); }
define float @foo() {
; CHECK-LABEL: foo:
; CHECK: // %bb.0: // %entry
; CHECK-NEON-NEXT: movi v0.2s, #79, lsl #24
; CHECK-SCALAR-NEXT: mov w8, #1325400064
; CHECK-SCALAR-NEXT: fmov s0, w8
; CHECK-NEXT: ret
entry:
ret float 0x41E0000000000000
}

; float foo2(float p) { return p + float(2147483648); }
define float @foo2(float %f) {
; CHECK-LABEL: foo2:
; CHECK: // %bb.0: // %entry
; CHECK-NEON-NEXT: movi v1.2s, #79, lsl #24
; CHECK-NEON-NEXT: fadd s0, s0, s1
; CHECK-SCALAR-NEXT: mov w8, #1325400064
; CHECK-SCALAR-NEXT: fmov s1, w8
; CHECK-SCALAR-NEXT: fadd s0, s0, s1
; CHECK-NEXT: ret
entry:
%p = fadd float %f, 0x41E0000000000000
ret float %p
}
3 changes: 1 addition & 2 deletions llvm/test/CodeGen/AArch64/vecreduce-fadd-legalization.ll
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,7 @@ define fp128 @test_v1f128(<1 x fp128> %a) nounwind {
define float @test_v3f32(<3 x float> %a) nounwind {
; CHECK-LABEL: test_v3f32:
; CHECK: // %bb.0:
; CHECK-NEXT: mov w8, #-2147483648
; CHECK-NEXT: fmov s1, w8
; CHECK-NEXT: movi v1.2s, #128, lsl #24
; CHECK-NEXT: mov v0.s[3], v1.s[0]
; CHECK-NEXT: faddp v0.4s, v0.4s, v0.4s
; CHECK-NEXT: faddp s0, v0.2s
Expand Down