313 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s3 4declare i16 @llvm.convert.to.fp16.f32(float %a)5declare i16 @llvm.convert.to.fp16.f64(double %a)6 7declare float @llvm.convert.from.fp16.f32(i16 %a)8declare double @llvm.convert.from.fp16.f64(i16 %a)9 10define float @func_i16fp32(ptr %a) {11; CHECK-LABEL: func_i16fp32:12; CHECK: # %bb.0:13; CHECK-NEXT: st %s9, (, %s11)14; CHECK-NEXT: st %s10, 8(, %s11)15; CHECK-NEXT: or %s9, 0, %s1116; CHECK-NEXT: lea %s11, -240(, %s11)17; CHECK-NEXT: brge.l.t %s11, %s8, .LBB0_218; CHECK-NEXT: # %bb.1:19; CHECK-NEXT: ld %s61, 24(, %s14)20; CHECK-NEXT: or %s62, 0, %s021; CHECK-NEXT: lea %s63, 31522; CHECK-NEXT: shm.l %s63, (%s61)23; CHECK-NEXT: shm.l %s8, 8(%s61)24; CHECK-NEXT: shm.l %s11, 16(%s61)25; CHECK-NEXT: monc26; CHECK-NEXT: or %s0, 0, %s6227; CHECK-NEXT: .LBB0_2:28; CHECK-NEXT: ld2b.zx %s0, (, %s0)29; CHECK-NEXT: lea %s1, __extendhfsf2@lo30; CHECK-NEXT: and %s1, %s1, (32)031; CHECK-NEXT: lea.sl %s12, __extendhfsf2@hi(, %s1)32; CHECK-NEXT: bsic %s10, (, %s12)33; CHECK-NEXT: or %s11, 0, %s934; CHECK-NEXT: ld %s10, 8(, %s11)35; CHECK-NEXT: ld %s9, (, %s11)36; CHECK-NEXT: b.l.t (, %s10)37 %a.val = load i16, ptr %a, align 438 %a.asd = call float @llvm.convert.from.fp16.f32(i16 %a.val)39 ret float %a.asd40}41 42define double @func_i16fp64(ptr %a) {43; CHECK-LABEL: func_i16fp64:44; CHECK: # %bb.0:45; CHECK-NEXT: st %s9, (, %s11)46; CHECK-NEXT: st %s10, 8(, %s11)47; CHECK-NEXT: or %s9, 0, %s1148; CHECK-NEXT: lea %s11, -240(, %s11)49; CHECK-NEXT: brge.l.t %s11, %s8, .LBB1_250; CHECK-NEXT: # %bb.1:51; CHECK-NEXT: ld %s61, 24(, %s14)52; CHECK-NEXT: or %s62, 0, %s053; CHECK-NEXT: lea %s63, 31554; CHECK-NEXT: shm.l %s63, (%s61)55; CHECK-NEXT: shm.l %s8, 8(%s61)56; CHECK-NEXT: shm.l %s11, 16(%s61)57; CHECK-NEXT: monc58; CHECK-NEXT: or %s0, 0, %s6259; CHECK-NEXT: .LBB1_2:60; CHECK-NEXT: ld2b.zx %s0, (, %s0)61; CHECK-NEXT: lea %s1, __extendhfsf2@lo62; CHECK-NEXT: and %s1, %s1, (32)063; CHECK-NEXT: lea.sl %s12, __extendhfsf2@hi(, %s1)64; CHECK-NEXT: bsic %s10, (, %s12)65; CHECK-NEXT: cvt.d.s %s0, %s066; CHECK-NEXT: or %s11, 0, %s967; CHECK-NEXT: ld %s10, 8(, %s11)68; CHECK-NEXT: ld %s9, (, %s11)69; CHECK-NEXT: b.l.t (, %s10)70 %a.val = load i16, ptr %a, align 471 %a.asd = call double @llvm.convert.from.fp16.f64(i16 %a.val)72 ret double %a.asd73}74 75define float @func_fp16fp32(ptr %a) {76; CHECK-LABEL: func_fp16fp32:77; CHECK: # %bb.0:78; CHECK-NEXT: st %s9, (, %s11)79; CHECK-NEXT: st %s10, 8(, %s11)80; CHECK-NEXT: or %s9, 0, %s1181; CHECK-NEXT: lea %s11, -240(, %s11)82; CHECK-NEXT: brge.l.t %s11, %s8, .LBB2_283; CHECK-NEXT: # %bb.1:84; CHECK-NEXT: ld %s61, 24(, %s14)85; CHECK-NEXT: or %s62, 0, %s086; CHECK-NEXT: lea %s63, 31587; CHECK-NEXT: shm.l %s63, (%s61)88; CHECK-NEXT: shm.l %s8, 8(%s61)89; CHECK-NEXT: shm.l %s11, 16(%s61)90; CHECK-NEXT: monc91; CHECK-NEXT: or %s0, 0, %s6292; CHECK-NEXT: .LBB2_2:93; CHECK-NEXT: ld2b.zx %s0, (, %s0)94; CHECK-NEXT: lea %s1, __extendhfsf2@lo95; CHECK-NEXT: and %s1, %s1, (32)096; CHECK-NEXT: lea.sl %s12, __extendhfsf2@hi(, %s1)97; CHECK-NEXT: bsic %s10, (, %s12)98; CHECK-NEXT: or %s11, 0, %s999; CHECK-NEXT: ld %s10, 8(, %s11)100; CHECK-NEXT: ld %s9, (, %s11)101; CHECK-NEXT: b.l.t (, %s10)102 %a.val = load half, ptr %a, align 4103 %a.asd = fpext half %a.val to float104 ret float %a.asd105}106 107define double @func_fp16fp64(ptr %a) {108; CHECK-LABEL: func_fp16fp64:109; CHECK: # %bb.0:110; CHECK-NEXT: st %s9, (, %s11)111; CHECK-NEXT: st %s10, 8(, %s11)112; CHECK-NEXT: or %s9, 0, %s11113; CHECK-NEXT: lea %s11, -240(, %s11)114; CHECK-NEXT: brge.l.t %s11, %s8, .LBB3_2115; CHECK-NEXT: # %bb.1:116; CHECK-NEXT: ld %s61, 24(, %s14)117; CHECK-NEXT: or %s62, 0, %s0118; CHECK-NEXT: lea %s63, 315119; CHECK-NEXT: shm.l %s63, (%s61)120; CHECK-NEXT: shm.l %s8, 8(%s61)121; CHECK-NEXT: shm.l %s11, 16(%s61)122; CHECK-NEXT: monc123; CHECK-NEXT: or %s0, 0, %s62124; CHECK-NEXT: .LBB3_2:125; CHECK-NEXT: ld2b.zx %s0, (, %s0)126; CHECK-NEXT: lea %s1, __extendhfsf2@lo127; CHECK-NEXT: and %s1, %s1, (32)0128; CHECK-NEXT: lea.sl %s12, __extendhfsf2@hi(, %s1)129; CHECK-NEXT: bsic %s10, (, %s12)130; CHECK-NEXT: cvt.d.s %s0, %s0131; CHECK-NEXT: or %s11, 0, %s9132; CHECK-NEXT: ld %s10, 8(, %s11)133; CHECK-NEXT: ld %s9, (, %s11)134; CHECK-NEXT: b.l.t (, %s10)135 %a.val = load half, ptr %a, align 4136 %a.asd = fpext half %a.val to double137 ret double %a.asd138}139 140define void @func_fp32i16(ptr %fl.ptr, float %val) {141; CHECK-LABEL: func_fp32i16:142; CHECK: # %bb.0:143; CHECK-NEXT: st %s9, (, %s11)144; CHECK-NEXT: st %s10, 8(, %s11)145; CHECK-NEXT: or %s9, 0, %s11146; CHECK-NEXT: lea %s11, -240(, %s11)147; CHECK-NEXT: brge.l.t %s11, %s8, .LBB4_2148; CHECK-NEXT: # %bb.1:149; CHECK-NEXT: ld %s61, 24(, %s14)150; CHECK-NEXT: or %s62, 0, %s0151; CHECK-NEXT: lea %s63, 315152; CHECK-NEXT: shm.l %s63, (%s61)153; CHECK-NEXT: shm.l %s8, 8(%s61)154; CHECK-NEXT: shm.l %s11, 16(%s61)155; CHECK-NEXT: monc156; CHECK-NEXT: or %s0, 0, %s62157; CHECK-NEXT: .LBB4_2:158; CHECK-NEXT: st %s18, 288(, %s11) # 8-byte Folded Spill159; CHECK-NEXT: or %s18, 0, %s0160; CHECK-NEXT: lea %s0, __truncsfhf2@lo161; CHECK-NEXT: and %s0, %s0, (32)0162; CHECK-NEXT: lea.sl %s12, __truncsfhf2@hi(, %s0)163; CHECK-NEXT: or %s0, 0, %s1164; CHECK-NEXT: bsic %s10, (, %s12)165; CHECK-NEXT: st2b %s0, (, %s18)166; CHECK-NEXT: ld %s18, 288(, %s11) # 8-byte Folded Reload167; CHECK-NEXT: or %s11, 0, %s9168; CHECK-NEXT: ld %s10, 8(, %s11)169; CHECK-NEXT: ld %s9, (, %s11)170; CHECK-NEXT: b.l.t (, %s10)171 %val.asf = call i16 @llvm.convert.to.fp16.f32(float %val)172 store i16 %val.asf, ptr %fl.ptr173 ret void174}175 176define half @func_fp32fp16(ptr %fl.ptr, float %a) {177; CHECK-LABEL: func_fp32fp16:178; CHECK: # %bb.0:179; CHECK-NEXT: st %s9, (, %s11)180; CHECK-NEXT: st %s10, 8(, %s11)181; CHECK-NEXT: or %s9, 0, %s11182; CHECK-NEXT: lea %s11, -240(, %s11)183; CHECK-NEXT: brge.l.t %s11, %s8, .LBB5_2184; CHECK-NEXT: # %bb.1:185; CHECK-NEXT: ld %s61, 24(, %s14)186; CHECK-NEXT: or %s62, 0, %s0187; CHECK-NEXT: lea %s63, 315188; CHECK-NEXT: shm.l %s63, (%s61)189; CHECK-NEXT: shm.l %s8, 8(%s61)190; CHECK-NEXT: shm.l %s11, 16(%s61)191; CHECK-NEXT: monc192; CHECK-NEXT: or %s0, 0, %s62193; CHECK-NEXT: .LBB5_2:194; CHECK-NEXT: st %s18, 288(, %s11) # 8-byte Folded Spill195; CHECK-NEXT: st %s19, 296(, %s11) # 8-byte Folded Spill196; CHECK-NEXT: or %s18, 0, %s0197; CHECK-NEXT: lea %s0, __truncsfhf2@lo198; CHECK-NEXT: and %s0, %s0, (32)0199; CHECK-NEXT: lea.sl %s12, __truncsfhf2@hi(, %s0)200; CHECK-NEXT: or %s0, 0, %s1201; CHECK-NEXT: bsic %s10, (, %s12)202; CHECK-NEXT: or %s19, 0, %s0203; CHECK-NEXT: lea %s0, __extendhfsf2@lo204; CHECK-NEXT: and %s0, %s0, (32)0205; CHECK-NEXT: lea.sl %s12, __extendhfsf2@hi(, %s0)206; CHECK-NEXT: or %s0, 0, %s19207; CHECK-NEXT: bsic %s10, (, %s12)208; CHECK-NEXT: st2b %s19, (, %s18)209; CHECK-NEXT: ld %s19, 296(, %s11) # 8-byte Folded Reload210; CHECK-NEXT: ld %s18, 288(, %s11) # 8-byte Folded Reload211; CHECK-NEXT: or %s11, 0, %s9212; CHECK-NEXT: ld %s10, 8(, %s11)213; CHECK-NEXT: ld %s9, (, %s11)214; CHECK-NEXT: b.l.t (, %s10)215 %a.asd = fptrunc float %a to half216 store half %a.asd, ptr %fl.ptr217 ret half %a.asd218}219 220define double @func_fp32fp64(ptr %a) {221; CHECK-LABEL: func_fp32fp64:222; CHECK: # %bb.0:223; CHECK-NEXT: ldu %s0, (, %s0)224; CHECK-NEXT: cvt.d.s %s0, %s0225; CHECK-NEXT: b.l.t (, %s10)226 %a.val = load float, ptr %a, align 4227 %a.asd = fpext float %a.val to double228 ret double %a.asd229}230 231define void @func_fp64i16(ptr %fl.ptr, double %val) {232; CHECK-LABEL: func_fp64i16:233; CHECK: # %bb.0:234; CHECK-NEXT: st %s9, (, %s11)235; CHECK-NEXT: st %s10, 8(, %s11)236; CHECK-NEXT: or %s9, 0, %s11237; CHECK-NEXT: lea %s11, -240(, %s11)238; CHECK-NEXT: brge.l.t %s11, %s8, .LBB7_2239; CHECK-NEXT: # %bb.1:240; CHECK-NEXT: ld %s61, 24(, %s14)241; CHECK-NEXT: or %s62, 0, %s0242; CHECK-NEXT: lea %s63, 315243; CHECK-NEXT: shm.l %s63, (%s61)244; CHECK-NEXT: shm.l %s8, 8(%s61)245; CHECK-NEXT: shm.l %s11, 16(%s61)246; CHECK-NEXT: monc247; CHECK-NEXT: or %s0, 0, %s62248; CHECK-NEXT: .LBB7_2:249; CHECK-NEXT: st %s18, 288(, %s11) # 8-byte Folded Spill250; CHECK-NEXT: or %s18, 0, %s0251; CHECK-NEXT: lea %s0, __truncdfhf2@lo252; CHECK-NEXT: and %s0, %s0, (32)0253; CHECK-NEXT: lea.sl %s12, __truncdfhf2@hi(, %s0)254; CHECK-NEXT: or %s0, 0, %s1255; CHECK-NEXT: bsic %s10, (, %s12)256; CHECK-NEXT: st2b %s0, (, %s18)257; CHECK-NEXT: ld %s18, 288(, %s11) # 8-byte Folded Reload258; CHECK-NEXT: or %s11, 0, %s9259; CHECK-NEXT: ld %s10, 8(, %s11)260; CHECK-NEXT: ld %s9, (, %s11)261; CHECK-NEXT: b.l.t (, %s10)262 %val.asf = call i16 @llvm.convert.to.fp16.f64(double %val)263 store i16 %val.asf, ptr %fl.ptr264 ret void265}266 267define void @func_fp64fp16(ptr %fl.ptr, double %val) {268; CHECK-LABEL: func_fp64fp16:269; CHECK: # %bb.0:270; CHECK-NEXT: st %s9, (, %s11)271; CHECK-NEXT: st %s10, 8(, %s11)272; CHECK-NEXT: or %s9, 0, %s11273; CHECK-NEXT: lea %s11, -240(, %s11)274; CHECK-NEXT: brge.l.t %s11, %s8, .LBB8_2275; CHECK-NEXT: # %bb.1:276; CHECK-NEXT: ld %s61, 24(, %s14)277; CHECK-NEXT: or %s62, 0, %s0278; CHECK-NEXT: lea %s63, 315279; CHECK-NEXT: shm.l %s63, (%s61)280; CHECK-NEXT: shm.l %s8, 8(%s61)281; CHECK-NEXT: shm.l %s11, 16(%s61)282; CHECK-NEXT: monc283; CHECK-NEXT: or %s0, 0, %s62284; CHECK-NEXT: .LBB8_2:285; CHECK-NEXT: st %s18, 288(, %s11) # 8-byte Folded Spill286; CHECK-NEXT: or %s18, 0, %s0287; CHECK-NEXT: lea %s0, __truncdfhf2@lo288; CHECK-NEXT: and %s0, %s0, (32)0289; CHECK-NEXT: lea.sl %s12, __truncdfhf2@hi(, %s0)290; CHECK-NEXT: or %s0, 0, %s1291; CHECK-NEXT: bsic %s10, (, %s12)292; CHECK-NEXT: st2b %s0, (, %s18)293; CHECK-NEXT: ld %s18, 288(, %s11) # 8-byte Folded Reload294; CHECK-NEXT: or %s11, 0, %s9295; CHECK-NEXT: ld %s10, 8(, %s11)296; CHECK-NEXT: ld %s9, (, %s11)297; CHECK-NEXT: b.l.t (, %s10)298 %val.asf = fptrunc double %val to half299 store half %val.asf, ptr %fl.ptr300 ret void301}302 303define void @func_fp64fp32(ptr %fl.ptr, double %val) {304; CHECK-LABEL: func_fp64fp32:305; CHECK: # %bb.0:306; CHECK-NEXT: cvt.s.d %s1, %s1307; CHECK-NEXT: stu %s1, (, %s0)308; CHECK-NEXT: b.l.t (, %s10)309 %val.asf = fptrunc double %val to float310 store float %val.asf, ptr %fl.ptr311 ret void312}313