brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.7 KiB · 6c5fd8e Raw
465 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-SD-NOFP163; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-SD-FP164; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-GI-NOFP165; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-GI-FP166 7define double @sqrt_f64(double %a) {8; CHECK-LABEL: sqrt_f64:9; CHECK:       // %bb.0: // %entry10; CHECK-NEXT:    fsqrt d0, d011; CHECK-NEXT:    ret12entry:13  %c = call double @llvm.sqrt.f64(double %a)14  ret double %c15}16 17define float @sqrt_f32(float %a) {18; CHECK-LABEL: sqrt_f32:19; CHECK:       // %bb.0: // %entry20; CHECK-NEXT:    fsqrt s0, s021; CHECK-NEXT:    ret22entry:23  %c = call float @llvm.sqrt.f32(float %a)24  ret float %c25}26 27define half @sqrt_f16(half %a) {28; CHECK-SD-NOFP16-LABEL: sqrt_f16:29; CHECK-SD-NOFP16:       // %bb.0: // %entry30; CHECK-SD-NOFP16-NEXT:    fcvt s0, h031; CHECK-SD-NOFP16-NEXT:    fsqrt s0, s032; CHECK-SD-NOFP16-NEXT:    fcvt h0, s033; CHECK-SD-NOFP16-NEXT:    ret34;35; CHECK-SD-FP16-LABEL: sqrt_f16:36; CHECK-SD-FP16:       // %bb.0: // %entry37; CHECK-SD-FP16-NEXT:    fsqrt h0, h038; CHECK-SD-FP16-NEXT:    ret39;40; CHECK-GI-NOFP16-LABEL: sqrt_f16:41; CHECK-GI-NOFP16:       // %bb.0: // %entry42; CHECK-GI-NOFP16-NEXT:    fcvt s0, h043; CHECK-GI-NOFP16-NEXT:    fsqrt s0, s044; CHECK-GI-NOFP16-NEXT:    fcvt h0, s045; CHECK-GI-NOFP16-NEXT:    ret46;47; CHECK-GI-FP16-LABEL: sqrt_f16:48; CHECK-GI-FP16:       // %bb.0: // %entry49; CHECK-GI-FP16-NEXT:    fsqrt h0, h050; CHECK-GI-FP16-NEXT:    ret51entry:52  %c = call half @llvm.sqrt.f16(half %a)53  ret half %c54}55 56define <2 x double> @sqrt_v2f64(<2 x double> %a) {57; CHECK-LABEL: sqrt_v2f64:58; CHECK:       // %bb.0: // %entry59; CHECK-NEXT:    fsqrt v0.2d, v0.2d60; CHECK-NEXT:    ret61entry:62  %c = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %a)63  ret <2 x double> %c64}65 66define <3 x double> @sqrt_v3f64(<3 x double> %a) {67; CHECK-SD-LABEL: sqrt_v3f64:68; CHECK-SD:       // %bb.0: // %entry69; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q070; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q171; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 def $q272; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]73; CHECK-SD-NEXT:    fsqrt v2.2d, v2.2d74; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q275; CHECK-SD-NEXT:    fsqrt v0.2d, v0.2d76; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #877; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q078; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q179; CHECK-SD-NEXT:    ret80;81; CHECK-GI-LABEL: sqrt_v3f64:82; CHECK-GI:       // %bb.0: // %entry83; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q084; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q185; CHECK-GI-NEXT:    fsqrt d2, d286; CHECK-GI-NEXT:    mov v0.d[1], v1.d[0]87; CHECK-GI-NEXT:    fsqrt v0.2d, v0.2d88; CHECK-GI-NEXT:    mov d1, v0.d[1]89; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q090; CHECK-GI-NEXT:    ret91entry:92  %c = call <3 x double> @llvm.sqrt.v3f64(<3 x double> %a)93  ret <3 x double> %c94}95 96define <4 x double> @sqrt_v4f64(<4 x double> %a) {97; CHECK-LABEL: sqrt_v4f64:98; CHECK:       // %bb.0: // %entry99; CHECK-NEXT:    fsqrt v0.2d, v0.2d100; CHECK-NEXT:    fsqrt v1.2d, v1.2d101; CHECK-NEXT:    ret102entry:103  %c = call <4 x double> @llvm.sqrt.v4f64(<4 x double> %a)104  ret <4 x double> %c105}106 107define <2 x float> @sqrt_v2f32(<2 x float> %a) {108; CHECK-LABEL: sqrt_v2f32:109; CHECK:       // %bb.0: // %entry110; CHECK-NEXT:    fsqrt v0.2s, v0.2s111; CHECK-NEXT:    ret112entry:113  %c = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %a)114  ret <2 x float> %c115}116 117define <3 x float> @sqrt_v3f32(<3 x float> %a) {118; CHECK-LABEL: sqrt_v3f32:119; CHECK:       // %bb.0: // %entry120; CHECK-NEXT:    fsqrt v0.4s, v0.4s121; CHECK-NEXT:    ret122entry:123  %c = call <3 x float> @llvm.sqrt.v3f32(<3 x float> %a)124  ret <3 x float> %c125}126 127define <4 x float> @sqrt_v4f32(<4 x float> %a) {128; CHECK-LABEL: sqrt_v4f32:129; CHECK:       // %bb.0: // %entry130; CHECK-NEXT:    fsqrt v0.4s, v0.4s131; CHECK-NEXT:    ret132entry:133  %c = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %a)134  ret <4 x float> %c135}136 137define <8 x float> @sqrt_v8f32(<8 x float> %a) {138; CHECK-LABEL: sqrt_v8f32:139; CHECK:       // %bb.0: // %entry140; CHECK-NEXT:    fsqrt v0.4s, v0.4s141; CHECK-NEXT:    fsqrt v1.4s, v1.4s142; CHECK-NEXT:    ret143entry:144  %c = call <8 x float> @llvm.sqrt.v8f32(<8 x float> %a)145  ret <8 x float> %c146}147 148define <7 x half> @sqrt_v7f16(<7 x half> %a) {149; CHECK-SD-NOFP16-LABEL: sqrt_v7f16:150; CHECK-SD-NOFP16:       // %bb.0: // %entry151; CHECK-SD-NOFP16-NEXT:    mov h1, v0.h[1]152; CHECK-SD-NOFP16-NEXT:    fcvt s2, h0153; CHECK-SD-NOFP16-NEXT:    mov h3, v0.h[2]154; CHECK-SD-NOFP16-NEXT:    mov h4, v0.h[3]155; CHECK-SD-NOFP16-NEXT:    mov h5, v0.h[4]156; CHECK-SD-NOFP16-NEXT:    mov h6, v0.h[5]157; CHECK-SD-NOFP16-NEXT:    mov h7, v0.h[6]158; CHECK-SD-NOFP16-NEXT:    mov h0, v0.h[7]159; CHECK-SD-NOFP16-NEXT:    fcvt s1, h1160; CHECK-SD-NOFP16-NEXT:    fsqrt s2, s2161; CHECK-SD-NOFP16-NEXT:    fcvt s3, h3162; CHECK-SD-NOFP16-NEXT:    fcvt s4, h4163; CHECK-SD-NOFP16-NEXT:    fcvt s5, h5164; CHECK-SD-NOFP16-NEXT:    fcvt s6, h6165; CHECK-SD-NOFP16-NEXT:    fcvt s7, h7166; CHECK-SD-NOFP16-NEXT:    fcvt s16, h0167; CHECK-SD-NOFP16-NEXT:    fcvt h0, s2168; CHECK-SD-NOFP16-NEXT:    fsqrt s1, s1169; CHECK-SD-NOFP16-NEXT:    fcvt h1, s1170; CHECK-SD-NOFP16-NEXT:    mov v0.h[1], v1.h[0]171; CHECK-SD-NOFP16-NEXT:    fsqrt s3, s3172; CHECK-SD-NOFP16-NEXT:    fcvt h1, s3173; CHECK-SD-NOFP16-NEXT:    mov v0.h[2], v1.h[0]174; CHECK-SD-NOFP16-NEXT:    fsqrt s4, s4175; CHECK-SD-NOFP16-NEXT:    fcvt h1, s4176; CHECK-SD-NOFP16-NEXT:    mov v0.h[3], v1.h[0]177; CHECK-SD-NOFP16-NEXT:    fsqrt s5, s5178; CHECK-SD-NOFP16-NEXT:    fcvt h1, s5179; CHECK-SD-NOFP16-NEXT:    mov v0.h[4], v1.h[0]180; CHECK-SD-NOFP16-NEXT:    fsqrt s6, s6181; CHECK-SD-NOFP16-NEXT:    fcvt h1, s6182; CHECK-SD-NOFP16-NEXT:    mov v0.h[5], v1.h[0]183; CHECK-SD-NOFP16-NEXT:    fsqrt s7, s7184; CHECK-SD-NOFP16-NEXT:    fcvt h1, s7185; CHECK-SD-NOFP16-NEXT:    mov v0.h[6], v1.h[0]186; CHECK-SD-NOFP16-NEXT:    fsqrt s2, s16187; CHECK-SD-NOFP16-NEXT:    fcvt h1, s2188; CHECK-SD-NOFP16-NEXT:    mov v0.h[7], v1.h[0]189; CHECK-SD-NOFP16-NEXT:    ret190;191; CHECK-SD-FP16-LABEL: sqrt_v7f16:192; CHECK-SD-FP16:       // %bb.0: // %entry193; CHECK-SD-FP16-NEXT:    fsqrt v0.8h, v0.8h194; CHECK-SD-FP16-NEXT:    ret195;196; CHECK-GI-NOFP16-LABEL: sqrt_v7f16:197; CHECK-GI-NOFP16:       // %bb.0: // %entry198; CHECK-GI-NOFP16-NEXT:    fcvtl v1.4s, v0.4h199; CHECK-GI-NOFP16-NEXT:    mov v2.h[0], v0.h[4]200; CHECK-GI-NOFP16-NEXT:    fsqrt v1.4s, v1.4s201; CHECK-GI-NOFP16-NEXT:    mov v2.h[1], v0.h[5]202; CHECK-GI-NOFP16-NEXT:    mov v2.h[2], v0.h[6]203; CHECK-GI-NOFP16-NEXT:    fcvtl v0.4s, v2.4h204; CHECK-GI-NOFP16-NEXT:    fcvtn v1.4h, v1.4s205; CHECK-GI-NOFP16-NEXT:    fsqrt v2.4s, v0.4s206; CHECK-GI-NOFP16-NEXT:    mov v0.h[0], v1.h[0]207; CHECK-GI-NOFP16-NEXT:    mov v0.h[1], v1.h[1]208; CHECK-GI-NOFP16-NEXT:    mov v0.h[2], v1.h[2]209; CHECK-GI-NOFP16-NEXT:    fcvtn v2.4h, v2.4s210; CHECK-GI-NOFP16-NEXT:    mov v0.h[3], v1.h[3]211; CHECK-GI-NOFP16-NEXT:    mov v0.h[4], v2.h[0]212; CHECK-GI-NOFP16-NEXT:    mov v0.h[5], v2.h[1]213; CHECK-GI-NOFP16-NEXT:    mov v0.h[6], v2.h[2]214; CHECK-GI-NOFP16-NEXT:    ret215;216; CHECK-GI-FP16-LABEL: sqrt_v7f16:217; CHECK-GI-FP16:       // %bb.0: // %entry218; CHECK-GI-FP16-NEXT:    fsqrt v0.8h, v0.8h219; CHECK-GI-FP16-NEXT:    ret220entry:221  %c = call <7 x half> @llvm.sqrt.v7f16(<7 x half> %a)222  ret <7 x half> %c223}224 225define <4 x half> @sqrt_v4f16(<4 x half> %a) {226; CHECK-SD-NOFP16-LABEL: sqrt_v4f16:227; CHECK-SD-NOFP16:       // %bb.0: // %entry228; CHECK-SD-NOFP16-NEXT:    // kill: def $d0 killed $d0 def $q0229; CHECK-SD-NOFP16-NEXT:    mov h1, v0.h[1]230; CHECK-SD-NOFP16-NEXT:    fcvt s2, h0231; CHECK-SD-NOFP16-NEXT:    mov h3, v0.h[2]232; CHECK-SD-NOFP16-NEXT:    mov h0, v0.h[3]233; CHECK-SD-NOFP16-NEXT:    fcvt s1, h1234; CHECK-SD-NOFP16-NEXT:    fsqrt s2, s2235; CHECK-SD-NOFP16-NEXT:    fcvt s3, h3236; CHECK-SD-NOFP16-NEXT:    fcvt s0, h0237; CHECK-SD-NOFP16-NEXT:    fsqrt s1, s1238; CHECK-SD-NOFP16-NEXT:    fcvt h1, s1239; CHECK-SD-NOFP16-NEXT:    fsqrt s3, s3240; CHECK-SD-NOFP16-NEXT:    fsqrt s4, s0241; CHECK-SD-NOFP16-NEXT:    fcvt h0, s2242; CHECK-SD-NOFP16-NEXT:    mov v0.h[1], v1.h[0]243; CHECK-SD-NOFP16-NEXT:    fcvt h1, s3244; CHECK-SD-NOFP16-NEXT:    mov v0.h[2], v1.h[0]245; CHECK-SD-NOFP16-NEXT:    fcvt h1, s4246; CHECK-SD-NOFP16-NEXT:    mov v0.h[3], v1.h[0]247; CHECK-SD-NOFP16-NEXT:    // kill: def $d0 killed $d0 killed $q0248; CHECK-SD-NOFP16-NEXT:    ret249;250; CHECK-SD-FP16-LABEL: sqrt_v4f16:251; CHECK-SD-FP16:       // %bb.0: // %entry252; CHECK-SD-FP16-NEXT:    fsqrt v0.4h, v0.4h253; CHECK-SD-FP16-NEXT:    ret254;255; CHECK-GI-NOFP16-LABEL: sqrt_v4f16:256; CHECK-GI-NOFP16:       // %bb.0: // %entry257; CHECK-GI-NOFP16-NEXT:    fcvtl v0.4s, v0.4h258; CHECK-GI-NOFP16-NEXT:    fsqrt v0.4s, v0.4s259; CHECK-GI-NOFP16-NEXT:    fcvtn v0.4h, v0.4s260; CHECK-GI-NOFP16-NEXT:    ret261;262; CHECK-GI-FP16-LABEL: sqrt_v4f16:263; CHECK-GI-FP16:       // %bb.0: // %entry264; CHECK-GI-FP16-NEXT:    fsqrt v0.4h, v0.4h265; CHECK-GI-FP16-NEXT:    ret266entry:267  %c = call <4 x half> @llvm.sqrt.v4f16(<4 x half> %a)268  ret <4 x half> %c269}270 271define <8 x half> @sqrt_v8f16(<8 x half> %a) {272; CHECK-SD-NOFP16-LABEL: sqrt_v8f16:273; CHECK-SD-NOFP16:       // %bb.0: // %entry274; CHECK-SD-NOFP16-NEXT:    mov h1, v0.h[1]275; CHECK-SD-NOFP16-NEXT:    fcvt s2, h0276; CHECK-SD-NOFP16-NEXT:    mov h3, v0.h[2]277; CHECK-SD-NOFP16-NEXT:    mov h4, v0.h[3]278; CHECK-SD-NOFP16-NEXT:    mov h5, v0.h[4]279; CHECK-SD-NOFP16-NEXT:    mov h6, v0.h[5]280; CHECK-SD-NOFP16-NEXT:    mov h7, v0.h[6]281; CHECK-SD-NOFP16-NEXT:    mov h0, v0.h[7]282; CHECK-SD-NOFP16-NEXT:    fcvt s1, h1283; CHECK-SD-NOFP16-NEXT:    fsqrt s2, s2284; CHECK-SD-NOFP16-NEXT:    fcvt s3, h3285; CHECK-SD-NOFP16-NEXT:    fcvt s4, h4286; CHECK-SD-NOFP16-NEXT:    fcvt s5, h5287; CHECK-SD-NOFP16-NEXT:    fcvt s6, h6288; CHECK-SD-NOFP16-NEXT:    fcvt s7, h7289; CHECK-SD-NOFP16-NEXT:    fcvt s16, h0290; CHECK-SD-NOFP16-NEXT:    fcvt h0, s2291; CHECK-SD-NOFP16-NEXT:    fsqrt s1, s1292; CHECK-SD-NOFP16-NEXT:    fcvt h1, s1293; CHECK-SD-NOFP16-NEXT:    mov v0.h[1], v1.h[0]294; CHECK-SD-NOFP16-NEXT:    fsqrt s3, s3295; CHECK-SD-NOFP16-NEXT:    fcvt h1, s3296; CHECK-SD-NOFP16-NEXT:    mov v0.h[2], v1.h[0]297; CHECK-SD-NOFP16-NEXT:    fsqrt s4, s4298; CHECK-SD-NOFP16-NEXT:    fcvt h1, s4299; CHECK-SD-NOFP16-NEXT:    mov v0.h[3], v1.h[0]300; CHECK-SD-NOFP16-NEXT:    fsqrt s5, s5301; CHECK-SD-NOFP16-NEXT:    fcvt h1, s5302; CHECK-SD-NOFP16-NEXT:    mov v0.h[4], v1.h[0]303; CHECK-SD-NOFP16-NEXT:    fsqrt s6, s6304; CHECK-SD-NOFP16-NEXT:    fcvt h1, s6305; CHECK-SD-NOFP16-NEXT:    mov v0.h[5], v1.h[0]306; CHECK-SD-NOFP16-NEXT:    fsqrt s7, s7307; CHECK-SD-NOFP16-NEXT:    fcvt h1, s7308; CHECK-SD-NOFP16-NEXT:    mov v0.h[6], v1.h[0]309; CHECK-SD-NOFP16-NEXT:    fsqrt s2, s16310; CHECK-SD-NOFP16-NEXT:    fcvt h1, s2311; CHECK-SD-NOFP16-NEXT:    mov v0.h[7], v1.h[0]312; CHECK-SD-NOFP16-NEXT:    ret313;314; CHECK-SD-FP16-LABEL: sqrt_v8f16:315; CHECK-SD-FP16:       // %bb.0: // %entry316; CHECK-SD-FP16-NEXT:    fsqrt v0.8h, v0.8h317; CHECK-SD-FP16-NEXT:    ret318;319; CHECK-GI-NOFP16-LABEL: sqrt_v8f16:320; CHECK-GI-NOFP16:       // %bb.0: // %entry321; CHECK-GI-NOFP16-NEXT:    fcvtl v1.4s, v0.4h322; CHECK-GI-NOFP16-NEXT:    fcvtl2 v0.4s, v0.8h323; CHECK-GI-NOFP16-NEXT:    fsqrt v1.4s, v1.4s324; CHECK-GI-NOFP16-NEXT:    fsqrt v2.4s, v0.4s325; CHECK-GI-NOFP16-NEXT:    fcvtn v0.4h, v1.4s326; CHECK-GI-NOFP16-NEXT:    fcvtn2 v0.8h, v2.4s327; CHECK-GI-NOFP16-NEXT:    ret328;329; CHECK-GI-FP16-LABEL: sqrt_v8f16:330; CHECK-GI-FP16:       // %bb.0: // %entry331; CHECK-GI-FP16-NEXT:    fsqrt v0.8h, v0.8h332; CHECK-GI-FP16-NEXT:    ret333entry:334  %c = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a)335  ret <8 x half> %c336}337 338define <16 x half> @sqrt_v16f16(<16 x half> %a) {339; CHECK-SD-NOFP16-LABEL: sqrt_v16f16:340; CHECK-SD-NOFP16:       // %bb.0: // %entry341; CHECK-SD-NOFP16-NEXT:    mov h2, v0.h[1]342; CHECK-SD-NOFP16-NEXT:    fcvt s3, h0343; CHECK-SD-NOFP16-NEXT:    mov h4, v0.h[2]344; CHECK-SD-NOFP16-NEXT:    mov h5, v0.h[3]345; CHECK-SD-NOFP16-NEXT:    mov h6, v0.h[4]346; CHECK-SD-NOFP16-NEXT:    mov h7, v0.h[5]347; CHECK-SD-NOFP16-NEXT:    mov h16, v0.h[6]348; CHECK-SD-NOFP16-NEXT:    mov h0, v0.h[7]349; CHECK-SD-NOFP16-NEXT:    fcvt s2, h2350; CHECK-SD-NOFP16-NEXT:    fsqrt s3, s3351; CHECK-SD-NOFP16-NEXT:    fcvt s4, h4352; CHECK-SD-NOFP16-NEXT:    fcvt s5, h5353; CHECK-SD-NOFP16-NEXT:    fcvt s6, h6354; CHECK-SD-NOFP16-NEXT:    fcvt s7, h7355; CHECK-SD-NOFP16-NEXT:    fcvt s0, h0356; CHECK-SD-NOFP16-NEXT:    fcvt s16, h16357; CHECK-SD-NOFP16-NEXT:    fsqrt s17, s0358; CHECK-SD-NOFP16-NEXT:    mov h0, v1.h[1]359; CHECK-SD-NOFP16-NEXT:    fcvt s0, h0360; CHECK-SD-NOFP16-NEXT:    fsqrt s18, s0361; CHECK-SD-NOFP16-NEXT:    fcvt s0, h1362; CHECK-SD-NOFP16-NEXT:    fsqrt s19, s0363; CHECK-SD-NOFP16-NEXT:    mov h0, v1.h[2]364; CHECK-SD-NOFP16-NEXT:    fcvt s0, h0365; CHECK-SD-NOFP16-NEXT:    fsqrt s20, s0366; CHECK-SD-NOFP16-NEXT:    mov h0, v1.h[3]367; CHECK-SD-NOFP16-NEXT:    fcvt s0, h0368; CHECK-SD-NOFP16-NEXT:    fsqrt s21, s0369; CHECK-SD-NOFP16-NEXT:    mov h0, v1.h[4]370; CHECK-SD-NOFP16-NEXT:    fcvt s0, h0371; CHECK-SD-NOFP16-NEXT:    fsqrt s2, s2372; CHECK-SD-NOFP16-NEXT:    fcvt h2, s2373; CHECK-SD-NOFP16-NEXT:    fsqrt s22, s0374; CHECK-SD-NOFP16-NEXT:    mov h0, v1.h[5]375; CHECK-SD-NOFP16-NEXT:    fcvt s0, h0376; CHECK-SD-NOFP16-NEXT:    fsqrt s4, s4377; CHECK-SD-NOFP16-NEXT:    fsqrt s5, s5378; CHECK-SD-NOFP16-NEXT:    fsqrt s23, s0379; CHECK-SD-NOFP16-NEXT:    mov h0, v1.h[6]380; CHECK-SD-NOFP16-NEXT:    fcvt s0, h0381; CHECK-SD-NOFP16-NEXT:    fsqrt s6, s6382; CHECK-SD-NOFP16-NEXT:    fsqrt s7, s7383; CHECK-SD-NOFP16-NEXT:    fsqrt s24, s0384; CHECK-SD-NOFP16-NEXT:    mov h0, v1.h[7]385; CHECK-SD-NOFP16-NEXT:    fcvt h1, s19386; CHECK-SD-NOFP16-NEXT:    fcvt s25, h0387; CHECK-SD-NOFP16-NEXT:    fcvt h0, s3388; CHECK-SD-NOFP16-NEXT:    fcvt h3, s18389; CHECK-SD-NOFP16-NEXT:    mov v0.h[1], v2.h[0]390; CHECK-SD-NOFP16-NEXT:    fcvt h2, s4391; CHECK-SD-NOFP16-NEXT:    mov v1.h[1], v3.h[0]392; CHECK-SD-NOFP16-NEXT:    fcvt h3, s20393; CHECK-SD-NOFP16-NEXT:    mov v0.h[2], v2.h[0]394; CHECK-SD-NOFP16-NEXT:    fcvt h2, s5395; CHECK-SD-NOFP16-NEXT:    mov v1.h[2], v3.h[0]396; CHECK-SD-NOFP16-NEXT:    fcvt h3, s21397; CHECK-SD-NOFP16-NEXT:    mov v0.h[3], v2.h[0]398; CHECK-SD-NOFP16-NEXT:    fcvt h2, s6399; CHECK-SD-NOFP16-NEXT:    mov v1.h[3], v3.h[0]400; CHECK-SD-NOFP16-NEXT:    fcvt h3, s22401; CHECK-SD-NOFP16-NEXT:    mov v0.h[4], v2.h[0]402; CHECK-SD-NOFP16-NEXT:    fcvt h2, s7403; CHECK-SD-NOFP16-NEXT:    mov v1.h[4], v3.h[0]404; CHECK-SD-NOFP16-NEXT:    fcvt h3, s23405; CHECK-SD-NOFP16-NEXT:    mov v0.h[5], v2.h[0]406; CHECK-SD-NOFP16-NEXT:    mov v1.h[5], v3.h[0]407; CHECK-SD-NOFP16-NEXT:    fcvt h3, s24408; CHECK-SD-NOFP16-NEXT:    fsqrt s16, s16409; CHECK-SD-NOFP16-NEXT:    mov v1.h[6], v3.h[0]410; CHECK-SD-NOFP16-NEXT:    fcvt h2, s16411; CHECK-SD-NOFP16-NEXT:    mov v0.h[6], v2.h[0]412; CHECK-SD-NOFP16-NEXT:    fcvt h2, s17413; CHECK-SD-NOFP16-NEXT:    fsqrt s18, s25414; CHECK-SD-NOFP16-NEXT:    mov v0.h[7], v2.h[0]415; CHECK-SD-NOFP16-NEXT:    fcvt h3, s18416; CHECK-SD-NOFP16-NEXT:    mov v1.h[7], v3.h[0]417; CHECK-SD-NOFP16-NEXT:    ret418;419; CHECK-SD-FP16-LABEL: sqrt_v16f16:420; CHECK-SD-FP16:       // %bb.0: // %entry421; CHECK-SD-FP16-NEXT:    fsqrt v0.8h, v0.8h422; CHECK-SD-FP16-NEXT:    fsqrt v1.8h, v1.8h423; CHECK-SD-FP16-NEXT:    ret424;425; CHECK-GI-NOFP16-LABEL: sqrt_v16f16:426; CHECK-GI-NOFP16:       // %bb.0: // %entry427; CHECK-GI-NOFP16-NEXT:    fcvtl v2.4s, v0.4h428; CHECK-GI-NOFP16-NEXT:    fcvtl2 v0.4s, v0.8h429; CHECK-GI-NOFP16-NEXT:    fsqrt v3.4s, v0.4s430; CHECK-GI-NOFP16-NEXT:    fcvtl v0.4s, v1.4h431; CHECK-GI-NOFP16-NEXT:    fsqrt v2.4s, v2.4s432; CHECK-GI-NOFP16-NEXT:    fsqrt v4.4s, v0.4s433; CHECK-GI-NOFP16-NEXT:    fcvtl2 v0.4s, v1.8h434; CHECK-GI-NOFP16-NEXT:    fsqrt v5.4s, v0.4s435; CHECK-GI-NOFP16-NEXT:    fcvtn v0.4h, v2.4s436; CHECK-GI-NOFP16-NEXT:    fcvtn v1.4h, v4.4s437; CHECK-GI-NOFP16-NEXT:    fcvtn2 v0.8h, v3.4s438; CHECK-GI-NOFP16-NEXT:    fcvtn2 v1.8h, v5.4s439; CHECK-GI-NOFP16-NEXT:    ret440;441; CHECK-GI-FP16-LABEL: sqrt_v16f16:442; CHECK-GI-FP16:       // %bb.0: // %entry443; CHECK-GI-FP16-NEXT:    fsqrt v0.8h, v0.8h444; CHECK-GI-FP16-NEXT:    fsqrt v1.8h, v1.8h445; CHECK-GI-FP16-NEXT:    ret446entry:447  %c = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a)448  ret <16 x half> %c449}450 451declare <16 x half> @llvm.sqrt.v16f16(<16 x half>)452declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)453declare <2 x float> @llvm.sqrt.v2f32(<2 x float>)454declare <3 x double> @llvm.sqrt.v3f64(<3 x double>)455declare <3 x float> @llvm.sqrt.v3f32(<3 x float>)456declare <4 x double> @llvm.sqrt.v4f64(<4 x double>)457declare <4 x float> @llvm.sqrt.v4f32(<4 x float>)458declare <4 x half> @llvm.sqrt.v4f16(<4 x half>)459declare <7 x half> @llvm.sqrt.v7f16(<7 x half>)460declare <8 x float> @llvm.sqrt.v8f32(<8 x float>)461declare <8 x half> @llvm.sqrt.v8f16(<8 x half>)462declare double @llvm.sqrt.f64(double)463declare float @llvm.sqrt.f32(float)464declare half @llvm.sqrt.f16(half)465