brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · 4d2a933 Raw
208 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefix=GCN %s3; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefix=GCN %s4 5; RUN: llc -global-isel=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s6; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s7 8; RUN: llc -global-isel=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 < %s | FileCheck -check-prefix=GFX11 %s9; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 < %s | FileCheck -check-prefix=GFX11 %s10 11define double @v_constained_fmul_f64_fpexcept_strict(double %x, double %y) #0 {12; GCN-LABEL: v_constained_fmul_f64_fpexcept_strict:13; GCN:       ; %bb.0:14; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)15; GCN-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]16; GCN-NEXT:    s_setpc_b64 s[30:31]17;18; GFX10-LABEL: v_constained_fmul_f64_fpexcept_strict:19; GFX10:       ; %bb.0:20; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)21; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]22; GFX10-NEXT:    s_setpc_b64 s[30:31]23;24; GFX11-LABEL: v_constained_fmul_f64_fpexcept_strict:25; GFX11:       ; %bb.0:26; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)27; GFX11-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]28; GFX11-NEXT:    s_setpc_b64 s[30:31]29  %val = call double @llvm.experimental.constrained.fmul.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict")30  ret double %val31}32 33define double @v_constained_fmul_f64_fpexcept_ignore(double %x, double %y) #0 {34; GCN-LABEL: v_constained_fmul_f64_fpexcept_ignore:35; GCN:       ; %bb.0:36; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)37; GCN-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]38; GCN-NEXT:    s_setpc_b64 s[30:31]39;40; GFX10-LABEL: v_constained_fmul_f64_fpexcept_ignore:41; GFX10:       ; %bb.0:42; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)43; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]44; GFX10-NEXT:    s_setpc_b64 s[30:31]45;46; GFX11-LABEL: v_constained_fmul_f64_fpexcept_ignore:47; GFX11:       ; %bb.0:48; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)49; GFX11-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]50; GFX11-NEXT:    s_setpc_b64 s[30:31]51  %val = call double @llvm.experimental.constrained.fmul.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.ignore")52  ret double %val53}54 55define double @v_constained_fmul_f64_fpexcept_maytrap(double %x, double %y) #0 {56; GCN-LABEL: v_constained_fmul_f64_fpexcept_maytrap:57; GCN:       ; %bb.0:58; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)59; GCN-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]60; GCN-NEXT:    s_setpc_b64 s[30:31]61;62; GFX10-LABEL: v_constained_fmul_f64_fpexcept_maytrap:63; GFX10:       ; %bb.0:64; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)65; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]66; GFX10-NEXT:    s_setpc_b64 s[30:31]67;68; GFX11-LABEL: v_constained_fmul_f64_fpexcept_maytrap:69; GFX11:       ; %bb.0:70; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)71; GFX11-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]72; GFX11-NEXT:    s_setpc_b64 s[30:31]73  %val = call double @llvm.experimental.constrained.fmul.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.maytrap")74  ret double %val75}76 77define <2 x double> @v_constained_fmul_v2f64_fpexcept_strict(<2 x double> %x, <2 x double> %y) #0 {78; GCN-LABEL: v_constained_fmul_v2f64_fpexcept_strict:79; GCN:       ; %bb.0:80; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)81; GCN-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]82; GCN-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]83; GCN-NEXT:    s_setpc_b64 s[30:31]84;85; GFX10-LABEL: v_constained_fmul_v2f64_fpexcept_strict:86; GFX10:       ; %bb.0:87; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)88; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]89; GFX10-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]90; GFX10-NEXT:    s_setpc_b64 s[30:31]91;92; GFX11-LABEL: v_constained_fmul_v2f64_fpexcept_strict:93; GFX11:       ; %bb.0:94; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)95; GFX11-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]96; GFX11-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]97; GFX11-NEXT:    s_setpc_b64 s[30:31]98  %val = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %x, <2 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict")99  ret <2 x double> %val100}101 102define <2 x double> @v_constained_fmul_v2f64_fpexcept_ignore(<2 x double> %x, <2 x double> %y) #0 {103; GCN-LABEL: v_constained_fmul_v2f64_fpexcept_ignore:104; GCN:       ; %bb.0:105; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; GCN-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]107; GCN-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]108; GCN-NEXT:    s_setpc_b64 s[30:31]109;110; GFX10-LABEL: v_constained_fmul_v2f64_fpexcept_ignore:111; GFX10:       ; %bb.0:112; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]114; GFX10-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]115; GFX10-NEXT:    s_setpc_b64 s[30:31]116;117; GFX11-LABEL: v_constained_fmul_v2f64_fpexcept_ignore:118; GFX11:       ; %bb.0:119; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)120; GFX11-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]121; GFX11-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]122; GFX11-NEXT:    s_setpc_b64 s[30:31]123  %val = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %x, <2 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.ignore")124  ret <2 x double> %val125}126 127define <2 x double> @v_constained_fmul_v2f64_fpexcept_maytrap(<2 x double> %x, <2 x double> %y) #0 {128; GCN-LABEL: v_constained_fmul_v2f64_fpexcept_maytrap:129; GCN:       ; %bb.0:130; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)131; GCN-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]132; GCN-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]133; GCN-NEXT:    s_setpc_b64 s[30:31]134;135; GFX10-LABEL: v_constained_fmul_v2f64_fpexcept_maytrap:136; GFX10:       ; %bb.0:137; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]139; GFX10-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]140; GFX10-NEXT:    s_setpc_b64 s[30:31]141;142; GFX11-LABEL: v_constained_fmul_v2f64_fpexcept_maytrap:143; GFX11:       ; %bb.0:144; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)145; GFX11-NEXT:    v_mul_f64 v[0:1], v[0:1], v[4:5]146; GFX11-NEXT:    v_mul_f64 v[2:3], v[2:3], v[6:7]147; GFX11-NEXT:    s_setpc_b64 s[30:31]148  %val = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %x, <2 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.maytrap")149  ret <2 x double> %val150}151 152define <3 x double> @v_constained_fmul_v3f64_fpexcept_strict(<3 x double> %x, <3 x double> %y) #0 {153; GCN-LABEL: v_constained_fmul_v3f64_fpexcept_strict:154; GCN:       ; %bb.0:155; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)156; GCN-NEXT:    v_mul_f64 v[0:1], v[0:1], v[6:7]157; GCN-NEXT:    v_mul_f64 v[2:3], v[2:3], v[8:9]158; GCN-NEXT:    v_mul_f64 v[4:5], v[4:5], v[10:11]159; GCN-NEXT:    s_setpc_b64 s[30:31]160;161; GFX10-LABEL: v_constained_fmul_v3f64_fpexcept_strict:162; GFX10:       ; %bb.0:163; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)164; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[6:7]165; GFX10-NEXT:    v_mul_f64 v[2:3], v[2:3], v[8:9]166; GFX10-NEXT:    v_mul_f64 v[4:5], v[4:5], v[10:11]167; GFX10-NEXT:    s_setpc_b64 s[30:31]168;169; GFX11-LABEL: v_constained_fmul_v3f64_fpexcept_strict:170; GFX11:       ; %bb.0:171; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)172; GFX11-NEXT:    v_mul_f64 v[0:1], v[0:1], v[6:7]173; GFX11-NEXT:    v_mul_f64 v[2:3], v[2:3], v[8:9]174; GFX11-NEXT:    v_mul_f64 v[4:5], v[4:5], v[10:11]175; GFX11-NEXT:    s_setpc_b64 s[30:31]176  %val = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double> %x, <3 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict")177  ret <3 x double> %val178}179 180define amdgpu_ps <2 x float> @s_constained_fmul_f64_fpexcept_strict(double inreg %x, double inreg %y) #0 {181; GCN-LABEL: s_constained_fmul_f64_fpexcept_strict:182; GCN:       ; %bb.0:183; GCN-NEXT:    v_mov_b32_e32 v0, s4184; GCN-NEXT:    v_mov_b32_e32 v1, s5185; GCN-NEXT:    v_mul_f64 v[0:1], s[2:3], v[0:1]186; GCN-NEXT:    ; return to shader part epilog187;188; GFX10-LABEL: s_constained_fmul_f64_fpexcept_strict:189; GFX10:       ; %bb.0:190; GFX10-NEXT:    v_mul_f64 v[0:1], s[2:3], s[4:5]191; GFX10-NEXT:    ; return to shader part epilog192;193; GFX11-LABEL: s_constained_fmul_f64_fpexcept_strict:194; GFX11:       ; %bb.0:195; GFX11-NEXT:    v_mul_f64 v[0:1], s[2:3], s[4:5]196; GFX11-NEXT:    ; return to shader part epilog197  %val = call double @llvm.experimental.constrained.fmul.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict")198  %cast = bitcast double %val to <2 x float>199  ret <2 x float> %cast200}201 202declare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata) #1203declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata) #1204declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata) #1205 206attributes #0 = { strictfp }207attributes #1 = { inaccessiblememonly nounwind willreturn }208