1; RUN: llc < %s -mtriple=aarch64-none-eabi | FileCheck %s 2 3 4define <16 x half> @sitofp_i32(<16 x i32> %a) #0 { 5; CHECK-LABEL: sitofp_i32: 6; CHECK-DAG: scvtf [[S0:v[0-9]+\.4s]], v0.4s 7; CHECK-DAG: scvtf [[S1:v[0-9]+\.4s]], v1.4s 8; CHECK-DAG: scvtf [[S2:v[0-9]+\.4s]], v2.4s 9; CHECK-DAG: scvtf [[S3:v[0-9]+\.4s]], v3.4s 10; CHECK-DAG: fcvtn v0.4h, [[S0]] 11; CHECK-DAG: fcvtn v1.4h, [[S2]] 12; CHECK-DAG: v[[R1:[0-9]+]].4h, [[S1]] 13; CHECK-DAG: v[[R3:[0-9]+]].4h, [[S3]] 14; CHECK-DAG: mov v0.d[1], v[[R1]].d[0] 15; CHECK-DAG: mov v1.d[1], v[[R3]].d[0] 16 17 %1 = sitofp <16 x i32> %a to <16 x half> 18 ret <16 x half> %1 19} 20 21 22define <16 x half> @sitofp_i64(<16 x i64> %a) #0 { 23; CHECK-LABEL: sitofp_i64: 24; CHECK-DAG: scvtf [[D0:v[0-9]+\.2d]], v0.2d 25; CHECK-DAG: scvtf [[D1:v[0-9]+\.2d]], v1.2d 26; CHECK-DAG: scvtf [[D2:v[0-9]+\.2d]], v2.2d 27; CHECK-DAG: scvtf [[D3:v[0-9]+\.2d]], v3.2d 28; CHECK-DAG: scvtf [[D4:v[0-9]+\.2d]], v4.2d 29; CHECK-DAG: scvtf [[D5:v[0-9]+\.2d]], v5.2d 30; CHECK-DAG: scvtf [[D6:v[0-9]+\.2d]], v6.2d 31; CHECK-DAG: scvtf [[D7:v[0-9]+\.2d]], v7.2d 32 33; CHECK-DAG: fcvtn [[S0:v[0-9]+]].2s, [[D0]] 34; CHECK-DAG: fcvtn [[S1:v[0-9]+]].2s, [[D2]] 35; CHECK-DAG: fcvtn [[S2:v[0-9]+]].2s, [[D4]] 36; CHECK-DAG: fcvtn [[S3:v[0-9]+]].2s, [[D6]] 37 38; CHECK-DAG: fcvtn2 [[S0]].4s, [[D1]] 39; CHECK-DAG: fcvtn2 [[S1]].4s, [[D3]] 40; CHECK-DAG: fcvtn2 [[S2]].4s, [[D5]] 41; CHECK-DAG: fcvtn2 [[S3]].4s, [[D7]] 42 43; CHECK-DAG: fcvtn v0.4h, [[S0]].4s 44; CHECK-DAG: fcvtn v1.4h, [[S2]].4s 45; CHECK-DAG: fcvtn v[[R1:[0-9]+]].4h, [[S1]].4s 46; CHECK-DAG: fcvtn v[[R3:[0-9]+]].4h, [[S3]].4s 47; CHECK-DAG: mov v0.d[1], v[[R1]].d[0] 48; CHECK-DAG: mov v1.d[1], v[[R3]].d[0] 49 50 %1 = sitofp <16 x i64> %a to <16 x half> 51 ret <16 x half> %1 52} 53 54 55define <16 x half> @uitofp_i32(<16 x i32> %a) #0 { 56; CHECK-LABEL: uitofp_i32: 57; CHECK-DAG: ucvtf [[S0:v[0-9]+\.4s]], v0.4s 58; CHECK-DAG: ucvtf [[S1:v[0-9]+\.4s]], v1.4s 59; CHECK-DAG: ucvtf [[S2:v[0-9]+\.4s]], v2.4s 60; CHECK-DAG: ucvtf [[S3:v[0-9]+\.4s]], v3.4s 61; CHECK-DAG: fcvtn v0.4h, [[S0]] 62; CHECK-DAG: fcvtn v1.4h, [[S2]] 63; CHECK-DAG: v[[R1:[0-9]+]].4h, [[S1]] 64; CHECK-DAG: v[[R3:[0-9]+]].4h, [[S3]] 65; CHECK-DAG: mov v0.d[1], v[[R1]].d[0] 66; CHECK-DAG: mov v1.d[1], v[[R3]].d[0] 67 68 %1 = uitofp <16 x i32> %a to <16 x half> 69 ret <16 x half> %1 70} 71 72 73define <16 x half> @uitofp_i64(<16 x i64> %a) #0 { 74; CHECK-LABEL: uitofp_i64: 75; CHECK-DAG: ucvtf [[D0:v[0-9]+\.2d]], v0.2d 76; CHECK-DAG: ucvtf [[D1:v[0-9]+\.2d]], v1.2d 77; CHECK-DAG: ucvtf [[D2:v[0-9]+\.2d]], v2.2d 78; CHECK-DAG: ucvtf [[D3:v[0-9]+\.2d]], v3.2d 79; CHECK-DAG: ucvtf [[D4:v[0-9]+\.2d]], v4.2d 80; CHECK-DAG: ucvtf [[D5:v[0-9]+\.2d]], v5.2d 81; CHECK-DAG: ucvtf [[D6:v[0-9]+\.2d]], v6.2d 82; CHECK-DAG: ucvtf [[D7:v[0-9]+\.2d]], v7.2d 83 84; CHECK-DAG: fcvtn [[S0:v[0-9]+]].2s, [[D0]] 85; CHECK-DAG: fcvtn [[S1:v[0-9]+]].2s, [[D2]] 86; CHECK-DAG: fcvtn [[S2:v[0-9]+]].2s, [[D4]] 87; CHECK-DAG: fcvtn [[S3:v[0-9]+]].2s, [[D6]] 88 89; CHECK-DAG: fcvtn2 [[S0]].4s, [[D1]] 90; CHECK-DAG: fcvtn2 [[S1]].4s, [[D3]] 91; CHECK-DAG: fcvtn2 [[S2]].4s, [[D5]] 92; CHECK-DAG: fcvtn2 [[S3]].4s, [[D7]] 93 94; CHECK-DAG: fcvtn v0.4h, [[S0]].4s 95; CHECK-DAG: fcvtn v1.4h, [[S2]].4s 96; CHECK-DAG: fcvtn v[[R1:[0-9]+]].4h, [[S1]].4s 97; CHECK-DAG: fcvtn v[[R3:[0-9]+]].4h, [[S3]].4s 98; CHECK-DAG: mov v0.d[1], v[[R1]].d[0] 99; CHECK-DAG: mov v1.d[1], v[[R3]].d[0] 100 101 %1 = uitofp <16 x i64> %a to <16 x half> 102 ret <16 x half> %1 103} 104 105attributes #0 = { nounwind } 106