brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.4 KiB · 3e6db4d Raw
345 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-prefixes=GFX10PLUS,GFX10 %s6; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s7 8; RUN: llc -global-isel= -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s9; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s10 11; RUN: llc -global-isel=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12 %s12; RUN: llc -global-isel=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12 %s13 14define float @v_constained_fsub_f32_fpexcept_strict(float %x, float %y) #0 {15; GCN-LABEL: v_constained_fsub_f32_fpexcept_strict:16; GCN:       ; %bb.0:17; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)18; GCN-NEXT:    v_sub_f32_e32 v0, v0, v119; GCN-NEXT:    s_setpc_b64 s[30:31]20;21; GFX10PLUS-LABEL: v_constained_fsub_f32_fpexcept_strict:22; GFX10PLUS:       ; %bb.0:23; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)24; GFX10PLUS-NEXT:    v_sub_f32_e32 v0, v0, v125; GFX10PLUS-NEXT:    s_setpc_b64 s[30:31]26;27; GFX12-LABEL: v_constained_fsub_f32_fpexcept_strict:28; GFX12:       ; %bb.0:29; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x030; GFX12-NEXT:    s_wait_expcnt 0x031; GFX12-NEXT:    s_wait_samplecnt 0x032; GFX12-NEXT:    s_wait_bvhcnt 0x033; GFX12-NEXT:    s_wait_kmcnt 0x034; GFX12-NEXT:    v_sub_f32_e32 v0, v0, v135; GFX12-NEXT:    s_setpc_b64 s[30:31]36  %val = call float @llvm.experimental.constrained.fsub.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict")37  ret float %val38}39 40define float @v_constained_fsub_f32_fpexcept_ignore(float %x, float %y) #0 {41; GCN-LABEL: v_constained_fsub_f32_fpexcept_ignore:42; GCN:       ; %bb.0:43; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GCN-NEXT:    v_sub_f32_e32 v0, v0, v145; GCN-NEXT:    s_setpc_b64 s[30:31]46;47; GFX10PLUS-LABEL: v_constained_fsub_f32_fpexcept_ignore:48; GFX10PLUS:       ; %bb.0:49; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)50; GFX10PLUS-NEXT:    v_sub_f32_e32 v0, v0, v151; GFX10PLUS-NEXT:    s_setpc_b64 s[30:31]52;53; GFX12-LABEL: v_constained_fsub_f32_fpexcept_ignore:54; GFX12:       ; %bb.0:55; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x056; GFX12-NEXT:    s_wait_expcnt 0x057; GFX12-NEXT:    s_wait_samplecnt 0x058; GFX12-NEXT:    s_wait_bvhcnt 0x059; GFX12-NEXT:    s_wait_kmcnt 0x060; GFX12-NEXT:    v_sub_f32_e32 v0, v0, v161; GFX12-NEXT:    s_setpc_b64 s[30:31]62  %val = call float @llvm.experimental.constrained.fsub.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.ignore")63  ret float %val64}65 66define float @v_constained_fsub_f32_fpexcept_maytrap(float %x, float %y) #0 {67; GCN-LABEL: v_constained_fsub_f32_fpexcept_maytrap:68; GCN:       ; %bb.0:69; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)70; GCN-NEXT:    v_sub_f32_e32 v0, v0, v171; GCN-NEXT:    s_setpc_b64 s[30:31]72;73; GFX10PLUS-LABEL: v_constained_fsub_f32_fpexcept_maytrap:74; GFX10PLUS:       ; %bb.0:75; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)76; GFX10PLUS-NEXT:    v_sub_f32_e32 v0, v0, v177; GFX10PLUS-NEXT:    s_setpc_b64 s[30:31]78;79; GFX12-LABEL: v_constained_fsub_f32_fpexcept_maytrap:80; GFX12:       ; %bb.0:81; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x082; GFX12-NEXT:    s_wait_expcnt 0x083; GFX12-NEXT:    s_wait_samplecnt 0x084; GFX12-NEXT:    s_wait_bvhcnt 0x085; GFX12-NEXT:    s_wait_kmcnt 0x086; GFX12-NEXT:    v_sub_f32_e32 v0, v0, v187; GFX12-NEXT:    s_setpc_b64 s[30:31]88  %val = call float @llvm.experimental.constrained.fsub.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.maytrap")89  ret float %val90}91 92define <2 x float> @v_constained_fsub_v2f32_fpexcept_strict(<2 x float> %x, <2 x float> %y) #0 {93; GCN-LABEL: v_constained_fsub_v2f32_fpexcept_strict:94; GCN:       ; %bb.0:95; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)96; GCN-NEXT:    v_sub_f32_e32 v0, v0, v297; GCN-NEXT:    v_sub_f32_e32 v1, v1, v398; GCN-NEXT:    s_setpc_b64 s[30:31]99;100; GFX10-LABEL: v_constained_fsub_v2f32_fpexcept_strict:101; GFX10:       ; %bb.0:102; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v2104; GFX10-NEXT:    v_sub_f32_e32 v1, v1, v3105; GFX10-NEXT:    s_setpc_b64 s[30:31]106;107; GFX11-LABEL: v_constained_fsub_v2f32_fpexcept_strict:108; GFX11:       ; %bb.0:109; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)110; GFX11-NEXT:    v_dual_sub_f32 v0, v0, v2 :: v_dual_sub_f32 v1, v1, v3111; GFX11-NEXT:    s_setpc_b64 s[30:31]112;113; GFX12-LABEL: v_constained_fsub_v2f32_fpexcept_strict:114; GFX12:       ; %bb.0:115; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0116; GFX12-NEXT:    s_wait_expcnt 0x0117; GFX12-NEXT:    s_wait_samplecnt 0x0118; GFX12-NEXT:    s_wait_bvhcnt 0x0119; GFX12-NEXT:    s_wait_kmcnt 0x0120; GFX12-NEXT:    v_dual_sub_f32 v0, v0, v2 :: v_dual_sub_f32 v1, v1, v3121; GFX12-NEXT:    s_setpc_b64 s[30:31]122  %val = call <2 x float> @llvm.experimental.constrained.fsub.v2f32(<2 x float> %x, <2 x float> %y, metadata !"round.tonearest", metadata !"fpexcept.strict")123  ret <2 x float> %val124}125 126define <2 x float> @v_constained_fsub_v2f32_fpexcept_ignore(<2 x float> %x, <2 x float> %y) #0 {127; GCN-LABEL: v_constained_fsub_v2f32_fpexcept_ignore:128; GCN:       ; %bb.0:129; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)130; GCN-NEXT:    v_sub_f32_e32 v0, v0, v2131; GCN-NEXT:    v_sub_f32_e32 v1, v1, v3132; GCN-NEXT:    s_setpc_b64 s[30:31]133;134; GFX10-LABEL: v_constained_fsub_v2f32_fpexcept_ignore:135; GFX10:       ; %bb.0:136; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)137; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v2138; GFX10-NEXT:    v_sub_f32_e32 v1, v1, v3139; GFX10-NEXT:    s_setpc_b64 s[30:31]140;141; GFX11-LABEL: v_constained_fsub_v2f32_fpexcept_ignore:142; GFX11:       ; %bb.0:143; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)144; GFX11-NEXT:    v_dual_sub_f32 v0, v0, v2 :: v_dual_sub_f32 v1, v1, v3145; GFX11-NEXT:    s_setpc_b64 s[30:31]146;147; GFX12-LABEL: v_constained_fsub_v2f32_fpexcept_ignore:148; GFX12:       ; %bb.0:149; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0150; GFX12-NEXT:    s_wait_expcnt 0x0151; GFX12-NEXT:    s_wait_samplecnt 0x0152; GFX12-NEXT:    s_wait_bvhcnt 0x0153; GFX12-NEXT:    s_wait_kmcnt 0x0154; GFX12-NEXT:    v_dual_sub_f32 v0, v0, v2 :: v_dual_sub_f32 v1, v1, v3155; GFX12-NEXT:    s_setpc_b64 s[30:31]156  %val = call <2 x float> @llvm.experimental.constrained.fsub.v2f32(<2 x float> %x, <2 x float> %y, metadata !"round.tonearest", metadata !"fpexcept.ignore")157  ret <2 x float> %val158}159 160define <2 x float> @v_constained_fsub_v2f32_fpexcept_maytrap(<2 x float> %x, <2 x float> %y) #0 {161; GCN-LABEL: v_constained_fsub_v2f32_fpexcept_maytrap:162; GCN:       ; %bb.0:163; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)164; GCN-NEXT:    v_sub_f32_e32 v0, v0, v2165; GCN-NEXT:    v_sub_f32_e32 v1, v1, v3166; GCN-NEXT:    s_setpc_b64 s[30:31]167;168; GFX10-LABEL: v_constained_fsub_v2f32_fpexcept_maytrap:169; GFX10:       ; %bb.0:170; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)171; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v2172; GFX10-NEXT:    v_sub_f32_e32 v1, v1, v3173; GFX10-NEXT:    s_setpc_b64 s[30:31]174;175; GFX11-LABEL: v_constained_fsub_v2f32_fpexcept_maytrap:176; GFX11:       ; %bb.0:177; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)178; GFX11-NEXT:    v_dual_sub_f32 v0, v0, v2 :: v_dual_sub_f32 v1, v1, v3179; GFX11-NEXT:    s_setpc_b64 s[30:31]180;181; GFX12-LABEL: v_constained_fsub_v2f32_fpexcept_maytrap:182; GFX12:       ; %bb.0:183; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0184; GFX12-NEXT:    s_wait_expcnt 0x0185; GFX12-NEXT:    s_wait_samplecnt 0x0186; GFX12-NEXT:    s_wait_bvhcnt 0x0187; GFX12-NEXT:    s_wait_kmcnt 0x0188; GFX12-NEXT:    v_dual_sub_f32 v0, v0, v2 :: v_dual_sub_f32 v1, v1, v3189; GFX12-NEXT:    s_setpc_b64 s[30:31]190  %val = call <2 x float> @llvm.experimental.constrained.fsub.v2f32(<2 x float> %x, <2 x float> %y, metadata !"round.tonearest", metadata !"fpexcept.maytrap")191  ret <2 x float> %val192}193 194define <3 x float> @v_constained_fsub_v3f32_fpexcept_strict(<3 x float> %x, <3 x float> %y) #0 {195; GCN-LABEL: v_constained_fsub_v3f32_fpexcept_strict:196; GCN:       ; %bb.0:197; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)198; GCN-NEXT:    v_sub_f32_e32 v0, v0, v3199; GCN-NEXT:    v_sub_f32_e32 v1, v1, v4200; GCN-NEXT:    v_sub_f32_e32 v2, v2, v5201; GCN-NEXT:    s_setpc_b64 s[30:31]202;203; GFX10-LABEL: v_constained_fsub_v3f32_fpexcept_strict:204; GFX10:       ; %bb.0:205; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)206; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v3207; GFX10-NEXT:    v_sub_f32_e32 v1, v1, v4208; GFX10-NEXT:    v_sub_f32_e32 v2, v2, v5209; GFX10-NEXT:    s_setpc_b64 s[30:31]210;211; GFX11-LABEL: v_constained_fsub_v3f32_fpexcept_strict:212; GFX11:       ; %bb.0:213; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)214; GFX11-NEXT:    v_dual_sub_f32 v0, v0, v3 :: v_dual_sub_f32 v1, v1, v4215; GFX11-NEXT:    v_sub_f32_e32 v2, v2, v5216; GFX11-NEXT:    s_setpc_b64 s[30:31]217;218; GFX12-LABEL: v_constained_fsub_v3f32_fpexcept_strict:219; GFX12:       ; %bb.0:220; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0221; GFX12-NEXT:    s_wait_expcnt 0x0222; GFX12-NEXT:    s_wait_samplecnt 0x0223; GFX12-NEXT:    s_wait_bvhcnt 0x0224; GFX12-NEXT:    s_wait_kmcnt 0x0225; GFX12-NEXT:    v_dual_sub_f32 v0, v0, v3 :: v_dual_sub_f32 v1, v1, v4226; GFX12-NEXT:    v_sub_f32_e32 v2, v2, v5227; GFX12-NEXT:    s_setpc_b64 s[30:31]228  %val = call <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float> %x, <3 x float> %y, metadata !"round.tonearest", metadata !"fpexcept.strict")229  ret <3 x float> %val230}231 232define amdgpu_ps float @s_constained_fsub_f32_fpexcept_strict(float inreg %x, float inreg %y) #0 {233; GCN-LABEL: s_constained_fsub_f32_fpexcept_strict:234; GCN:       ; %bb.0:235; GCN-NEXT:    v_mov_b32_e32 v0, s3236; GCN-NEXT:    v_sub_f32_e32 v0, s2, v0237; GCN-NEXT:    ; return to shader part epilog238;239; GFX10PLUS-LABEL: s_constained_fsub_f32_fpexcept_strict:240; GFX10PLUS:       ; %bb.0:241; GFX10PLUS-NEXT:    v_sub_f32_e64 v0, s2, s3242; GFX10PLUS-NEXT:    ; return to shader part epilog243;244; GFX12-LABEL: s_constained_fsub_f32_fpexcept_strict:245; GFX12:       ; %bb.0:246; GFX12-NEXT:    s_sub_f32 s0, s2, s3247; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_3)248; GFX12-NEXT:    v_mov_b32_e32 v0, s0249; GFX12-NEXT:    ; return to shader part epilog250  %val = call float @llvm.experimental.constrained.fsub.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict")251  ret float %val252}253 254define float @v_constained_fsub_f32_fpexcept_strict_fabs_lhs(float %x, float %y) #0 {255; GCN-LABEL: v_constained_fsub_f32_fpexcept_strict_fabs_lhs:256; GCN:       ; %bb.0:257; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)258; GCN-NEXT:    v_sub_f32_e64 v0, |v0|, v1259; GCN-NEXT:    s_setpc_b64 s[30:31]260;261; GFX10PLUS-LABEL: v_constained_fsub_f32_fpexcept_strict_fabs_lhs:262; GFX10PLUS:       ; %bb.0:263; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)264; GFX10PLUS-NEXT:    v_sub_f32_e64 v0, |v0|, v1265; GFX10PLUS-NEXT:    s_setpc_b64 s[30:31]266;267; GFX12-LABEL: v_constained_fsub_f32_fpexcept_strict_fabs_lhs:268; GFX12:       ; %bb.0:269; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0270; GFX12-NEXT:    s_wait_expcnt 0x0271; GFX12-NEXT:    s_wait_samplecnt 0x0272; GFX12-NEXT:    s_wait_bvhcnt 0x0273; GFX12-NEXT:    s_wait_kmcnt 0x0274; GFX12-NEXT:    v_sub_f32_e64 v0, |v0|, v1275; GFX12-NEXT:    s_setpc_b64 s[30:31]276  %fabs.x = call float @llvm.fabs.f32(float %x) #0277  %val = call float @llvm.experimental.constrained.fsub.f32(float %fabs.x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict")278  ret float %val279}280 281define float @v_constained_fsub_f32_fpexcept_strict_fabs_rhs(float %x, float %y) #0 {282; GCN-LABEL: v_constained_fsub_f32_fpexcept_strict_fabs_rhs:283; GCN:       ; %bb.0:284; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)285; GCN-NEXT:    v_sub_f32_e64 v0, v0, |v1|286; GCN-NEXT:    s_setpc_b64 s[30:31]287;288; GFX10PLUS-LABEL: v_constained_fsub_f32_fpexcept_strict_fabs_rhs:289; GFX10PLUS:       ; %bb.0:290; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)291; GFX10PLUS-NEXT:    v_sub_f32_e64 v0, v0, |v1|292; GFX10PLUS-NEXT:    s_setpc_b64 s[30:31]293;294; GFX12-LABEL: v_constained_fsub_f32_fpexcept_strict_fabs_rhs:295; GFX12:       ; %bb.0:296; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0297; GFX12-NEXT:    s_wait_expcnt 0x0298; GFX12-NEXT:    s_wait_samplecnt 0x0299; GFX12-NEXT:    s_wait_bvhcnt 0x0300; GFX12-NEXT:    s_wait_kmcnt 0x0301; GFX12-NEXT:    v_sub_f32_e64 v0, v0, |v1|302; GFX12-NEXT:    s_setpc_b64 s[30:31]303  %fabs.y = call float @llvm.fabs.f32(float %y) #0304  %val = call float @llvm.experimental.constrained.fsub.f32(float %x, float %fabs.y, metadata !"round.tonearest", metadata !"fpexcept.strict")305  ret float %val306}307 308define float @v_constained_fsub_f32_fpexcept_strict_fneg_fabs_lhs(float %x, float %y) #0 {309; GCN-LABEL: v_constained_fsub_f32_fpexcept_strict_fneg_fabs_lhs:310; GCN:       ; %bb.0:311; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)312; GCN-NEXT:    v_sub_f32_e64 v0, -|v0|, v1313; GCN-NEXT:    s_setpc_b64 s[30:31]314;315; GFX10PLUS-LABEL: v_constained_fsub_f32_fpexcept_strict_fneg_fabs_lhs:316; GFX10PLUS:       ; %bb.0:317; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)318; GFX10PLUS-NEXT:    v_sub_f32_e64 v0, -|v0|, v1319; GFX10PLUS-NEXT:    s_setpc_b64 s[30:31]320;321; GFX12-LABEL: v_constained_fsub_f32_fpexcept_strict_fneg_fabs_lhs:322; GFX12:       ; %bb.0:323; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0324; GFX12-NEXT:    s_wait_expcnt 0x0325; GFX12-NEXT:    s_wait_samplecnt 0x0326; GFX12-NEXT:    s_wait_bvhcnt 0x0327; GFX12-NEXT:    s_wait_kmcnt 0x0328; GFX12-NEXT:    v_sub_f32_e64 v0, -|v0|, v1329; GFX12-NEXT:    s_setpc_b64 s[30:31]330  %fabs.x = call float @llvm.fabs.f32(float %x) #0331  %neg.fabs.x = fneg float %fabs.x332  %val = call float @llvm.experimental.constrained.fsub.f32(float %neg.fabs.x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict")333  ret float %val334}335 336declare float @llvm.fabs.f32(float)337declare float @llvm.experimental.constrained.fsub.f32(float, float, metadata, metadata)338declare <2 x float> @llvm.experimental.constrained.fsub.v2f32(<2 x float>, <2 x float>, metadata, metadata)339declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)340 341attributes #0 = { strictfp }342;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:343; GFX12-GISEL: {{.*}}344; GFX12-SDAG: {{.*}}345