brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.0 KiB · 0a266bc Raw
288 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=tahiti -denormal-fp-math-f32=ieee < %s | FileCheck --check-prefix=FMA %s3; RUN: llc -mtriple=amdgcn -mcpu=verde -denormal-fp-math-f32=ieee < %s | FileCheck --check-prefix=NOFUSE %s4; RUN: llc -mtriple=amdgcn -mcpu=fiji -denormal-fp-math-f32=ieee < %s | FileCheck --check-prefix=NOFUSE %s5; RUN: llc -mtriple=amdgcn -mcpu=tonga -denormal-fp-math-f32=ieee < %s | FileCheck --check-prefix=NOFUSE %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -denormal-fp-math-f32=ieee < %s | FileCheck --check-prefix=FMA %s7; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math-f32=ieee < %s | FileCheck --check-prefix=FMAGFX10 %s8; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -denormal-fp-math-f32=ieee < %s | FileCheck --check-prefix=FMAGFX11 %s9 10; RUN: llc -mtriple=amdgcn -mcpu=tahiti -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefix=FMAD %s11; RUN: llc -mtriple=amdgcn -mcpu=verde -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefix=FMAD %s12; RUN: llc -mtriple=amdgcn -mcpu=fiji -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefix=FMAD %s13; RUN: llc -mtriple=amdgcn -mcpu=tonga -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefix=FMAD %s14; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefix=FMAD %s15; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefix=FMADGFX10 %s16; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefix=FMAGFX11 %s17 18; Check for incorrect fmad formation when distributing19 20define float @unsafe_fmul_fadd_distribute_fast_f32(float %arg0, float %arg1) #0 {21; FMA-LABEL: unsafe_fmul_fadd_distribute_fast_f32:22; FMA:       ; %bb.0:23; FMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)24; FMA-NEXT:    v_fma_f32 v0, v1, v0, v025; FMA-NEXT:    s_setpc_b64 s[30:31]26;27; NOFUSE-LABEL: unsafe_fmul_fadd_distribute_fast_f32:28; NOFUSE:       ; %bb.0:29; NOFUSE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)30; NOFUSE-NEXT:    v_add_f32_e32 v1, 1.0, v131; NOFUSE-NEXT:    v_mul_f32_e32 v0, v0, v132; NOFUSE-NEXT:    s_setpc_b64 s[30:31]33;34; FMAGFX10-LABEL: unsafe_fmul_fadd_distribute_fast_f32:35; FMAGFX10:       ; %bb.0:36; FMAGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)37; FMAGFX10-NEXT:    v_fmac_f32_e32 v0, v1, v038; FMAGFX10-NEXT:    s_setpc_b64 s[30:31]39;40; FMAGFX11-LABEL: unsafe_fmul_fadd_distribute_fast_f32:41; FMAGFX11:       ; %bb.0:42; FMAGFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)43; FMAGFX11-NEXT:    v_fmac_f32_e32 v0, v1, v044; FMAGFX11-NEXT:    s_setpc_b64 s[30:31]45;46; FMAD-LABEL: unsafe_fmul_fadd_distribute_fast_f32:47; FMAD:       ; %bb.0:48; FMAD-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)49; FMAD-NEXT:    v_mac_f32_e32 v0, v1, v050; FMAD-NEXT:    s_setpc_b64 s[30:31]51;52; FMADGFX10-LABEL: unsafe_fmul_fadd_distribute_fast_f32:53; FMADGFX10:       ; %bb.0:54; FMADGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)55; FMADGFX10-NEXT:    v_fmac_f32_e32 v0, v1, v056; FMADGFX10-NEXT:    s_setpc_b64 s[30:31]57  %add = fadd fast float %arg1, 1.058  %tmp1 = fmul fast float %arg0, %add59  ret float %tmp160}61 62define float @unsafe_fmul_fsub_distribute_fast_f32(float %arg0, float %arg1) #0 {63; FMA-LABEL: unsafe_fmul_fsub_distribute_fast_f32:64; FMA:       ; %bb.0:65; FMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; FMA-NEXT:    v_fma_f32 v0, -v1, v0, v067; FMA-NEXT:    s_setpc_b64 s[30:31]68;69; NOFUSE-LABEL: unsafe_fmul_fsub_distribute_fast_f32:70; NOFUSE:       ; %bb.0:71; NOFUSE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; NOFUSE-NEXT:    v_sub_f32_e32 v1, 1.0, v173; NOFUSE-NEXT:    v_mul_f32_e32 v0, v0, v174; NOFUSE-NEXT:    s_setpc_b64 s[30:31]75;76; FMAGFX10-LABEL: unsafe_fmul_fsub_distribute_fast_f32:77; FMAGFX10:       ; %bb.0:78; FMAGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)79; FMAGFX10-NEXT:    v_fma_f32 v0, -v1, v0, v080; FMAGFX10-NEXT:    s_setpc_b64 s[30:31]81;82; FMAGFX11-LABEL: unsafe_fmul_fsub_distribute_fast_f32:83; FMAGFX11:       ; %bb.0:84; FMAGFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; FMAGFX11-NEXT:    v_fma_f32 v0, -v1, v0, v086; FMAGFX11-NEXT:    s_setpc_b64 s[30:31]87;88; FMAD-LABEL: unsafe_fmul_fsub_distribute_fast_f32:89; FMAD:       ; %bb.0:90; FMAD-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)91; FMAD-NEXT:    v_mad_f32 v0, -v1, v0, v092; FMAD-NEXT:    s_setpc_b64 s[30:31]93;94; FMADGFX10-LABEL: unsafe_fmul_fsub_distribute_fast_f32:95; FMADGFX10:       ; %bb.0:96; FMADGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)97; FMADGFX10-NEXT:    v_fma_f32 v0, -v1, v0, v098; FMADGFX10-NEXT:    s_setpc_b64 s[30:31]99  %add = fsub fast float 1.0, %arg1100  %tmp1 = fmul fast float %arg0, %add101  ret float %tmp1102}103 104define <2 x float> @unsafe_fmul_fadd_distribute_fast_v2f32(<2 x float> %arg0, <2 x float> %arg1) #0 {105; FMA-LABEL: unsafe_fmul_fadd_distribute_fast_v2f32:106; FMA:       ; %bb.0:107; FMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)108; FMA-NEXT:    v_fma_f32 v0, v2, v0, v0109; FMA-NEXT:    v_fma_f32 v1, v3, v1, v1110; FMA-NEXT:    s_setpc_b64 s[30:31]111;112; NOFUSE-LABEL: unsafe_fmul_fadd_distribute_fast_v2f32:113; NOFUSE:       ; %bb.0:114; NOFUSE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)115; NOFUSE-NEXT:    v_add_f32_e32 v3, 1.0, v3116; NOFUSE-NEXT:    v_add_f32_e32 v2, 1.0, v2117; NOFUSE-NEXT:    v_mul_f32_e32 v0, v0, v2118; NOFUSE-NEXT:    v_mul_f32_e32 v1, v1, v3119; NOFUSE-NEXT:    s_setpc_b64 s[30:31]120;121; FMAGFX10-LABEL: unsafe_fmul_fadd_distribute_fast_v2f32:122; FMAGFX10:       ; %bb.0:123; FMAGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)124; FMAGFX10-NEXT:    v_fmac_f32_e32 v0, v2, v0125; FMAGFX10-NEXT:    v_fmac_f32_e32 v1, v3, v1126; FMAGFX10-NEXT:    s_setpc_b64 s[30:31]127;128; FMAGFX11-LABEL: unsafe_fmul_fadd_distribute_fast_v2f32:129; FMAGFX11:       ; %bb.0:130; FMAGFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)131; FMAGFX11-NEXT:    v_dual_fmac_f32 v0, v2, v0 :: v_dual_fmac_f32 v1, v3, v1132; FMAGFX11-NEXT:    s_setpc_b64 s[30:31]133;134; FMAD-LABEL: unsafe_fmul_fadd_distribute_fast_v2f32:135; FMAD:       ; %bb.0:136; FMAD-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)137; FMAD-NEXT:    v_mac_f32_e32 v0, v2, v0138; FMAD-NEXT:    v_mac_f32_e32 v1, v3, v1139; FMAD-NEXT:    s_setpc_b64 s[30:31]140;141; FMADGFX10-LABEL: unsafe_fmul_fadd_distribute_fast_v2f32:142; FMADGFX10:       ; %bb.0:143; FMADGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)144; FMADGFX10-NEXT:    v_fmac_f32_e32 v0, v2, v0145; FMADGFX10-NEXT:    v_fmac_f32_e32 v1, v3, v1146; FMADGFX10-NEXT:    s_setpc_b64 s[30:31]147  %add = fadd fast <2 x float> %arg1, <float 1.0, float 1.0>148  %tmp1 = fmul fast <2 x float> %arg0, %add149  ret <2 x float> %tmp1150}151 152define <2 x float> @unsafe_fmul_fsub_distribute_fast_v2f32(<2 x float> %arg0, <2 x float> %arg1) #0 {153; FMA-LABEL: unsafe_fmul_fsub_distribute_fast_v2f32:154; FMA:       ; %bb.0:155; FMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)156; FMA-NEXT:    v_fma_f32 v0, -v2, v0, v0157; FMA-NEXT:    v_fma_f32 v1, -v3, v1, v1158; FMA-NEXT:    s_setpc_b64 s[30:31]159;160; NOFUSE-LABEL: unsafe_fmul_fsub_distribute_fast_v2f32:161; NOFUSE:       ; %bb.0:162; NOFUSE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)163; NOFUSE-NEXT:    v_sub_f32_e32 v3, 1.0, v3164; NOFUSE-NEXT:    v_sub_f32_e32 v2, 1.0, v2165; NOFUSE-NEXT:    v_mul_f32_e32 v0, v0, v2166; NOFUSE-NEXT:    v_mul_f32_e32 v1, v1, v3167; NOFUSE-NEXT:    s_setpc_b64 s[30:31]168;169; FMAGFX10-LABEL: unsafe_fmul_fsub_distribute_fast_v2f32:170; FMAGFX10:       ; %bb.0:171; FMAGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)172; FMAGFX10-NEXT:    v_fma_f32 v0, -v2, v0, v0173; FMAGFX10-NEXT:    v_fma_f32 v1, -v3, v1, v1174; FMAGFX10-NEXT:    s_setpc_b64 s[30:31]175;176; FMAGFX11-LABEL: unsafe_fmul_fsub_distribute_fast_v2f32:177; FMAGFX11:       ; %bb.0:178; FMAGFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)179; FMAGFX11-NEXT:    v_fma_f32 v0, -v2, v0, v0180; FMAGFX11-NEXT:    v_fma_f32 v1, -v3, v1, v1181; FMAGFX11-NEXT:    s_setpc_b64 s[30:31]182;183; FMAD-LABEL: unsafe_fmul_fsub_distribute_fast_v2f32:184; FMAD:       ; %bb.0:185; FMAD-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)186; FMAD-NEXT:    v_mad_f32 v0, -v2, v0, v0187; FMAD-NEXT:    v_mad_f32 v1, -v3, v1, v1188; FMAD-NEXT:    s_setpc_b64 s[30:31]189;190; FMADGFX10-LABEL: unsafe_fmul_fsub_distribute_fast_v2f32:191; FMADGFX10:       ; %bb.0:192; FMADGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)193; FMADGFX10-NEXT:    v_fma_f32 v0, -v2, v0, v0194; FMADGFX10-NEXT:    v_fma_f32 v1, -v3, v1, v1195; FMADGFX10-NEXT:    s_setpc_b64 s[30:31]196  %add = fsub  fast <2 x float> <float 1.0, float 1.0>, %arg1197  %tmp1 = fmul fast <2 x float> %arg0, %add198  ret <2 x float> %tmp1199}200 201define <2 x float> @unsafe_fast_fmul_fadd_distribute_post_legalize_f32(float %arg0, <2 x float> %arg1) #0 {202; FMA-LABEL: unsafe_fast_fmul_fadd_distribute_post_legalize_f32:203; FMA:       ; %bb.0:204; FMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)205; FMA-NEXT:    v_fma_f32 v0, v0, v1, v1206; FMA-NEXT:    s_setpc_b64 s[30:31]207;208; NOFUSE-LABEL: unsafe_fast_fmul_fadd_distribute_post_legalize_f32:209; NOFUSE:       ; %bb.0:210; NOFUSE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)211; NOFUSE-NEXT:    v_add_f32_e32 v0, 1.0, v0212; NOFUSE-NEXT:    v_mul_f32_e32 v0, v1, v0213; NOFUSE-NEXT:    s_setpc_b64 s[30:31]214;215; FMAGFX10-LABEL: unsafe_fast_fmul_fadd_distribute_post_legalize_f32:216; FMAGFX10:       ; %bb.0:217; FMAGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)218; FMAGFX10-NEXT:    v_fma_f32 v0, v0, v1, v1219; FMAGFX10-NEXT:    s_setpc_b64 s[30:31]220;221; FMAGFX11-LABEL: unsafe_fast_fmul_fadd_distribute_post_legalize_f32:222; FMAGFX11:       ; %bb.0:223; FMAGFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)224; FMAGFX11-NEXT:    v_fma_f32 v0, v0, v1, v1225; FMAGFX11-NEXT:    s_setpc_b64 s[30:31]226;227; FMAD-LABEL: unsafe_fast_fmul_fadd_distribute_post_legalize_f32:228; FMAD:       ; %bb.0:229; FMAD-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)230; FMAD-NEXT:    v_mad_f32 v0, v0, v1, v1231; FMAD-NEXT:    s_setpc_b64 s[30:31]232;233; FMADGFX10-LABEL: unsafe_fast_fmul_fadd_distribute_post_legalize_f32:234; FMADGFX10:       ; %bb.0:235; FMADGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)236; FMADGFX10-NEXT:    v_mad_f32 v0, v0, v1, v1237; FMADGFX10-NEXT:    s_setpc_b64 s[30:31]238  %add = fadd fast float %arg0, 1.0239  %splat = insertelement <2 x float> poison, float %add, i32 0240  %tmp1 = fmul fast <2 x float> %arg1, %splat241  ret <2 x float> %tmp1242}243 244define <2 x float> @unsafe_fast_fmul_fsub_ditribute_post_legalize(float %arg0, <2 x float> %arg1) #0 {245; FMA-LABEL: unsafe_fast_fmul_fsub_ditribute_post_legalize:246; FMA:       ; %bb.0:247; FMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)248; FMA-NEXT:    v_fma_f32 v0, -v0, v1, v1249; FMA-NEXT:    s_setpc_b64 s[30:31]250;251; NOFUSE-LABEL: unsafe_fast_fmul_fsub_ditribute_post_legalize:252; NOFUSE:       ; %bb.0:253; NOFUSE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; NOFUSE-NEXT:    v_sub_f32_e32 v0, 1.0, v0255; NOFUSE-NEXT:    v_mul_f32_e32 v0, v1, v0256; NOFUSE-NEXT:    s_setpc_b64 s[30:31]257;258; FMAGFX10-LABEL: unsafe_fast_fmul_fsub_ditribute_post_legalize:259; FMAGFX10:       ; %bb.0:260; FMAGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)261; FMAGFX10-NEXT:    v_fma_f32 v0, -v0, v1, v1262; FMAGFX10-NEXT:    s_setpc_b64 s[30:31]263;264; FMAGFX11-LABEL: unsafe_fast_fmul_fsub_ditribute_post_legalize:265; FMAGFX11:       ; %bb.0:266; FMAGFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)267; FMAGFX11-NEXT:    v_fma_f32 v0, -v0, v1, v1268; FMAGFX11-NEXT:    s_setpc_b64 s[30:31]269;270; FMAD-LABEL: unsafe_fast_fmul_fsub_ditribute_post_legalize:271; FMAD:       ; %bb.0:272; FMAD-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)273; FMAD-NEXT:    v_mad_f32 v0, -v0, v1, v1274; FMAD-NEXT:    s_setpc_b64 s[30:31]275;276; FMADGFX10-LABEL: unsafe_fast_fmul_fsub_ditribute_post_legalize:277; FMADGFX10:       ; %bb.0:278; FMADGFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)279; FMADGFX10-NEXT:    v_mad_f32 v0, -v0, v1, v1280; FMADGFX10-NEXT:    s_setpc_b64 s[30:31]281  %sub = fsub fast float 1.0, %arg0282  %splat = insertelement <2 x float> poison, float %sub, i32 0283  %tmp1 = fmul fast <2 x float> %arg1, %splat284  ret <2 x float> %tmp1285}286 287attributes #0 = { "no-infs-fp-math"="true" }288