brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.9 KiB · da7cae8 Raw
809 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -denormal-fp-math-f32=ieee < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GCN-DENORM %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -denormal-fp-math-f32=preserve-sign < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GCN-FLUSH %s4 5define amdgpu_kernel void @div_1_by_x_25ulp(ptr addrspace(1) %arg) {6; GCN-DENORM-LABEL: div_1_by_x_25ulp:7; GCN-DENORM:       ; %bb.0:8; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x249; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 010; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)11; GCN-DENORM-NEXT:    s_load_dword s2, s[0:1], 0x012; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)13; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v0, s214; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, v015; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v2, s216; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v217; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v0, v218; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]19; GCN-DENORM-NEXT:    s_endpgm20;21; GCN-FLUSH-LABEL: div_1_by_x_25ulp:22; GCN-FLUSH:       ; %bb.0:23; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2424; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 025; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)26; GCN-FLUSH-NEXT:    s_load_dword s2, s[0:1], 0x027; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)28; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v0, s229; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]30; GCN-FLUSH-NEXT:    s_endpgm31  %load = load float, ptr addrspace(1) %arg, align 432  %div = fdiv float 1.000000e+00, %load, !fpmath !033  store float %div, ptr addrspace(1) %arg, align 434  ret void35}36 37define amdgpu_kernel void @div_minus_1_by_x_25ulp(ptr addrspace(1) %arg) {38; GCN-DENORM-LABEL: div_minus_1_by_x_25ulp:39; GCN-DENORM:       ; %bb.0:40; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2441; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 042; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)43; GCN-DENORM-NEXT:    s_load_dword s2, s[0:1], 0x044; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)45; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v0, -s246; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, v047; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v2, s248; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v249; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v0, v250; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]51; GCN-DENORM-NEXT:    s_endpgm52;53; GCN-FLUSH-LABEL: div_minus_1_by_x_25ulp:54; GCN-FLUSH:       ; %bb.0:55; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2456; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 057; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)58; GCN-FLUSH-NEXT:    s_load_dword s2, s[0:1], 0x059; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)60; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v0, -s261; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]62; GCN-FLUSH-NEXT:    s_endpgm63  %load = load float, ptr addrspace(1) %arg, align 464  %div = fdiv float -1.000000e+00, %load, !fpmath !065  store float %div, ptr addrspace(1) %arg, align 466  ret void67}68 69define amdgpu_kernel void @div_1_by_minus_x_25ulp(ptr addrspace(1) %arg) {70; GCN-DENORM-LABEL: div_1_by_minus_x_25ulp:71; GCN-DENORM:       ; %bb.0:72; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2473; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 074; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)75; GCN-DENORM-NEXT:    s_load_dword s2, s[0:1], 0x076; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)77; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v0, -s278; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, v079; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v2, s280; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v281; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v0, v282; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]83; GCN-DENORM-NEXT:    s_endpgm84;85; GCN-FLUSH-LABEL: div_1_by_minus_x_25ulp:86; GCN-FLUSH:       ; %bb.0:87; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2488; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 089; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)90; GCN-FLUSH-NEXT:    s_load_dword s2, s[0:1], 0x091; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)92; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v0, -s293; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]94; GCN-FLUSH-NEXT:    s_endpgm95  %load = load float, ptr addrspace(1) %arg, align 496  %neg = fneg float %load97  %div = fdiv float 1.000000e+00, %neg, !fpmath !098  store float %div, ptr addrspace(1) %arg, align 499  ret void100}101 102define amdgpu_kernel void @div_minus_1_by_minus_x_25ulp(ptr addrspace(1) %arg) {103; GCN-DENORM-LABEL: div_minus_1_by_minus_x_25ulp:104; GCN-DENORM:       ; %bb.0:105; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24106; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 0107; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)108; GCN-DENORM-NEXT:    s_load_dword s2, s[0:1], 0x0109; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)110; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v0, s2111; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, v0112; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v2, s2113; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v2114; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v0, v2115; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]116; GCN-DENORM-NEXT:    s_endpgm117;118; GCN-FLUSH-LABEL: div_minus_1_by_minus_x_25ulp:119; GCN-FLUSH:       ; %bb.0:120; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24121; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0122; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)123; GCN-FLUSH-NEXT:    s_load_dword s2, s[0:1], 0x0124; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)125; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v0, s2126; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]127; GCN-FLUSH-NEXT:    s_endpgm128  %load = load float, ptr addrspace(1) %arg, align 4129  %neg = fsub float -0.000000e+00, %load130  %div = fdiv float -1.000000e+00, %neg, !fpmath !0131  store float %div, ptr addrspace(1) %arg, align 4132  ret void133}134 135define amdgpu_kernel void @div_v4_1_by_x_25ulp(ptr addrspace(1) %arg) {136; GCN-DENORM-LABEL: div_v4_1_by_x_25ulp:137; GCN-DENORM:       ; %bb.0:138; GCN-DENORM-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24139; GCN-DENORM-NEXT:    v_mov_b32_e32 v4, 0140; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)141; GCN-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0142; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)143; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v0, s0144; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v2, s1145; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, v0146; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v2147; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v1, s0148; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v3, s1149; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v5, s2150; GCN-DENORM-NEXT:    v_sub_u32_e32 v1, 0, v1151; GCN-DENORM-NEXT:    v_sub_u32_e32 v3, 0, v3152; GCN-DENORM-NEXT:    v_rcp_f32_e32 v5, v5153; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v0, v1154; GCN-DENORM-NEXT:    v_ldexp_f32 v1, v2, v3155; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v3, s3156; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v6, s2157; GCN-DENORM-NEXT:    v_rcp_f32_e32 v3, v3158; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v6159; GCN-DENORM-NEXT:    v_ldexp_f32 v2, v5, v2160; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v5, s3161; GCN-DENORM-NEXT:    v_sub_u32_e32 v5, 0, v5162; GCN-DENORM-NEXT:    v_ldexp_f32 v3, v3, v5163; GCN-DENORM-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]164; GCN-DENORM-NEXT:    s_endpgm165;166; GCN-FLUSH-LABEL: div_v4_1_by_x_25ulp:167; GCN-FLUSH:       ; %bb.0:168; GCN-FLUSH-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24169; GCN-FLUSH-NEXT:    v_mov_b32_e32 v4, 0170; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)171; GCN-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0172; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)173; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v0, s0174; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v1, s1175; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, s2176; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v3, s3177; GCN-FLUSH-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]178; GCN-FLUSH-NEXT:    s_endpgm179  %load = load <4 x float>, ptr addrspace(1) %arg, align 16180  %div = fdiv <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %load, !fpmath !0181  store <4 x float> %div, ptr addrspace(1) %arg, align 16182  ret void183}184 185define amdgpu_kernel void @div_v4_minus_1_by_x_25ulp(ptr addrspace(1) %arg) {186; GCN-DENORM-LABEL: div_v4_minus_1_by_x_25ulp:187; GCN-DENORM:       ; %bb.0:188; GCN-DENORM-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24189; GCN-DENORM-NEXT:    v_mov_b32_e32 v4, 0190; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)191; GCN-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0192; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)193; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v0, -s0194; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v2, -s1195; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, v0196; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v2197; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v1, s0198; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v3, s1199; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v5, -s2200; GCN-DENORM-NEXT:    v_sub_u32_e32 v1, 0, v1201; GCN-DENORM-NEXT:    v_sub_u32_e32 v3, 0, v3202; GCN-DENORM-NEXT:    v_rcp_f32_e32 v5, v5203; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v0, v1204; GCN-DENORM-NEXT:    v_ldexp_f32 v1, v2, v3205; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v3, -s3206; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v6, s2207; GCN-DENORM-NEXT:    v_rcp_f32_e32 v3, v3208; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v6209; GCN-DENORM-NEXT:    v_ldexp_f32 v2, v5, v2210; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v5, s3211; GCN-DENORM-NEXT:    v_sub_u32_e32 v5, 0, v5212; GCN-DENORM-NEXT:    v_ldexp_f32 v3, v3, v5213; GCN-DENORM-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]214; GCN-DENORM-NEXT:    s_endpgm215;216; GCN-FLUSH-LABEL: div_v4_minus_1_by_x_25ulp:217; GCN-FLUSH:       ; %bb.0:218; GCN-FLUSH-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24219; GCN-FLUSH-NEXT:    v_mov_b32_e32 v4, 0220; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)221; GCN-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0222; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)223; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v0, -s0224; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v1, -s1225; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v2, -s2226; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v3, -s3227; GCN-FLUSH-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]228; GCN-FLUSH-NEXT:    s_endpgm229  %load = load <4 x float>, ptr addrspace(1) %arg, align 16230  %div = fdiv <4 x float> <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>, %load, !fpmath !0231  store <4 x float> %div, ptr addrspace(1) %arg, align 16232  ret void233}234 235define amdgpu_kernel void @div_v4_1_by_minus_x_25ulp(ptr addrspace(1) %arg) {236; GCN-DENORM-LABEL: div_v4_1_by_minus_x_25ulp:237; GCN-DENORM:       ; %bb.0:238; GCN-DENORM-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24239; GCN-DENORM-NEXT:    v_mov_b32_e32 v4, 0240; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)241; GCN-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0242; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)243; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v0, -s0244; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v2, -s1245; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, v0246; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v2247; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v1, s0248; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v3, s1249; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v5, -s2250; GCN-DENORM-NEXT:    v_sub_u32_e32 v1, 0, v1251; GCN-DENORM-NEXT:    v_sub_u32_e32 v3, 0, v3252; GCN-DENORM-NEXT:    v_rcp_f32_e32 v5, v5253; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v0, v1254; GCN-DENORM-NEXT:    v_ldexp_f32 v1, v2, v3255; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v3, -s3256; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v6, s2257; GCN-DENORM-NEXT:    v_rcp_f32_e32 v3, v3258; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v6259; GCN-DENORM-NEXT:    v_ldexp_f32 v2, v5, v2260; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v5, s3261; GCN-DENORM-NEXT:    v_sub_u32_e32 v5, 0, v5262; GCN-DENORM-NEXT:    v_ldexp_f32 v3, v3, v5263; GCN-DENORM-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]264; GCN-DENORM-NEXT:    s_endpgm265;266; GCN-FLUSH-LABEL: div_v4_1_by_minus_x_25ulp:267; GCN-FLUSH:       ; %bb.0:268; GCN-FLUSH-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24269; GCN-FLUSH-NEXT:    v_mov_b32_e32 v4, 0270; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)271; GCN-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0272; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)273; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v0, -s0274; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v1, -s1275; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v2, -s2276; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v3, -s3277; GCN-FLUSH-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]278; GCN-FLUSH-NEXT:    s_endpgm279  %load = load <4 x float>, ptr addrspace(1) %arg, align 16280  %neg = fneg <4 x float> %load281  %div = fdiv <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %neg, !fpmath !0282  store <4 x float> %div, ptr addrspace(1) %arg, align 16283  ret void284}285 286define amdgpu_kernel void @div_v4_minus_1_by_minus_x_25ulp(ptr addrspace(1) %arg) {287; GCN-DENORM-LABEL: div_v4_minus_1_by_minus_x_25ulp:288; GCN-DENORM:       ; %bb.0:289; GCN-DENORM-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24290; GCN-DENORM-NEXT:    v_mov_b32_e32 v4, 0291; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)292; GCN-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0293; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)294; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v0, s0295; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v2, s1296; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, v0297; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v2298; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v1, s0299; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v3, s1300; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v5, s2301; GCN-DENORM-NEXT:    v_sub_u32_e32 v1, 0, v1302; GCN-DENORM-NEXT:    v_sub_u32_e32 v3, 0, v3303; GCN-DENORM-NEXT:    v_rcp_f32_e32 v5, v5304; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v0, v1305; GCN-DENORM-NEXT:    v_ldexp_f32 v1, v2, v3306; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v3, s3307; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v6, s2308; GCN-DENORM-NEXT:    v_rcp_f32_e32 v3, v3309; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v6310; GCN-DENORM-NEXT:    v_ldexp_f32 v2, v5, v2311; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v5, s3312; GCN-DENORM-NEXT:    v_sub_u32_e32 v5, 0, v5313; GCN-DENORM-NEXT:    v_ldexp_f32 v3, v3, v5314; GCN-DENORM-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]315; GCN-DENORM-NEXT:    s_endpgm316;317; GCN-FLUSH-LABEL: div_v4_minus_1_by_minus_x_25ulp:318; GCN-FLUSH:       ; %bb.0:319; GCN-FLUSH-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24320; GCN-FLUSH-NEXT:    v_mov_b32_e32 v4, 0321; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)322; GCN-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0323; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)324; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v0, s0325; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v1, s1326; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, s2327; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v3, s3328; GCN-FLUSH-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]329; GCN-FLUSH-NEXT:    s_endpgm330  %load = load <4 x float>, ptr addrspace(1) %arg, align 16331  %neg = fneg <4 x float> %load332  %div = fdiv <4 x float> <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>, %neg, !fpmath !0333  store <4 x float> %div, ptr addrspace(1) %arg, align 16334  ret void335}336 337define amdgpu_kernel void @div_v4_c_by_x_25ulp(ptr addrspace(1) %arg) {338; GCN-DENORM-LABEL: div_v4_c_by_x_25ulp:339; GCN-DENORM:       ; %bb.0:340; GCN-DENORM-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24341; GCN-DENORM-NEXT:    v_mov_b32_e32 v4, 0342; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)343; GCN-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0344; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)345; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v1, s0346; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v2, s1347; GCN-DENORM-NEXT:    v_rcp_f32_e32 v1, v1348; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v2349; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v3, s1350; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v5, -s2351; GCN-DENORM-NEXT:    v_sub_u32_e32 v3, 0, v3352; GCN-DENORM-NEXT:    v_rcp_f32_e32 v5, v5353; GCN-DENORM-NEXT:    v_mul_f32_e32 v7, 0.5, v1354; GCN-DENORM-NEXT:    v_ldexp_f32 v1, v2, v3355; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v2, s3356; GCN-DENORM-NEXT:    v_rcp_f32_e32 v3, v2357; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v6, s2358; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v6359; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v0, s0360; GCN-DENORM-NEXT:    v_ldexp_f32 v2, v5, v2361; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v5, s3362; GCN-DENORM-NEXT:    v_sub_u32_e32 v0, 2, v0363; GCN-DENORM-NEXT:    v_mul_f32_e32 v3, -0.5, v3364; GCN-DENORM-NEXT:    v_sub_u32_e32 v5, 2, v5365; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v7, v0366; GCN-DENORM-NEXT:    v_ldexp_f32 v3, v3, v5367; GCN-DENORM-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]368; GCN-DENORM-NEXT:    s_endpgm369;370; GCN-FLUSH-LABEL: div_v4_c_by_x_25ulp:371; GCN-FLUSH:       ; %bb.0:372; GCN-FLUSH-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24373; GCN-FLUSH-NEXT:    v_mov_b32_e32 v0, 0x6f800000374; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0x2f800000375; GCN-FLUSH-NEXT:    v_mov_b32_e32 v4, 0376; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)377; GCN-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0378; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)379; GCN-FLUSH-NEXT:    v_cmp_gt_f32_e64 vcc, |s0|, v0380; GCN-FLUSH-NEXT:    v_cndmask_b32_e32 v3, 1.0, v1, vcc381; GCN-FLUSH-NEXT:    v_cmp_gt_f32_e64 vcc, |s3|, v0382; GCN-FLUSH-NEXT:    v_cndmask_b32_e32 v5, 1.0, v1, vcc383; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, s0, v3384; GCN-FLUSH-NEXT:    v_mul_f32_e32 v1, s3, v5385; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v0, v0386; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v6, v1387; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v1, s1388; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v2, -s2389; GCN-FLUSH-NEXT:    v_add_f32_e32 v0, v0, v0390; GCN-FLUSH-NEXT:    v_mul_f32_e32 v6, -2.0, v6391; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v3, v0392; GCN-FLUSH-NEXT:    v_mul_f32_e32 v3, v5, v6393; GCN-FLUSH-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]394; GCN-FLUSH-NEXT:    s_endpgm395  %load = load <4 x float>, ptr addrspace(1) %arg, align 16396  %div = fdiv <4 x float> <float 2.000000e+00, float 1.000000e+00, float -1.000000e+00, float -2.000000e+00>, %load, !fpmath !0397  store <4 x float> %div, ptr addrspace(1) %arg, align 16398  ret void399}400 401define amdgpu_kernel void @div_v4_c_by_minus_x_25ulp(ptr addrspace(1) %arg) {402; GCN-DENORM-LABEL: div_v4_c_by_minus_x_25ulp:403; GCN-DENORM:       ; %bb.0:404; GCN-DENORM-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24405; GCN-DENORM-NEXT:    v_mov_b32_e32 v4, 0406; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)407; GCN-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0408; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)409; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v1, -s0410; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v2, -s1411; GCN-DENORM-NEXT:    v_rcp_f32_e32 v1, v1412; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v2413; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v3, s1414; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v5, s2415; GCN-DENORM-NEXT:    v_sub_u32_e32 v3, 0, v3416; GCN-DENORM-NEXT:    v_rcp_f32_e32 v5, v5417; GCN-DENORM-NEXT:    v_mul_f32_e32 v7, 0.5, v1418; GCN-DENORM-NEXT:    v_ldexp_f32 v1, v2, v3419; GCN-DENORM-NEXT:    v_frexp_mant_f32_e64 v2, -s3420; GCN-DENORM-NEXT:    v_rcp_f32_e32 v3, v2421; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v6, s2422; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, 0, v6423; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v0, s0424; GCN-DENORM-NEXT:    v_ldexp_f32 v2, v5, v2425; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v5, s3426; GCN-DENORM-NEXT:    v_sub_u32_e32 v0, 2, v0427; GCN-DENORM-NEXT:    v_mul_f32_e32 v3, -0.5, v3428; GCN-DENORM-NEXT:    v_sub_u32_e32 v5, 2, v5429; GCN-DENORM-NEXT:    v_ldexp_f32 v0, v7, v0430; GCN-DENORM-NEXT:    v_ldexp_f32 v3, v3, v5431; GCN-DENORM-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]432; GCN-DENORM-NEXT:    s_endpgm433;434; GCN-FLUSH-LABEL: div_v4_c_by_minus_x_25ulp:435; GCN-FLUSH:       ; %bb.0:436; GCN-FLUSH-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24437; GCN-FLUSH-NEXT:    v_mov_b32_e32 v0, 0x6f800000438; GCN-FLUSH-NEXT:    v_mov_b32_e32 v2, 0x2f800000439; GCN-FLUSH-NEXT:    v_mov_b32_e32 v4, 0440; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)441; GCN-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0442; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)443; GCN-FLUSH-NEXT:    v_cmp_gt_f32_e64 vcc, |s0|, v0444; GCN-FLUSH-NEXT:    v_cndmask_b32_e32 v3, 1.0, v2, vcc445; GCN-FLUSH-NEXT:    v_cmp_gt_f32_e64 vcc, |s3|, v0446; GCN-FLUSH-NEXT:    v_mul_f32_e32 v5, s0, v3447; GCN-FLUSH-NEXT:    v_mul_f32_e64 v6, -s0, v3448; GCN-FLUSH-NEXT:    v_cndmask_b32_e32 v7, 1.0, v2, vcc449; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v5, v5450; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v6, v6451; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, s3, v7452; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v8, v0453; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v1, -s1454; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, s2455; GCN-FLUSH-NEXT:    v_sub_f32_e32 v0, v6, v5456; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v3, v0457; GCN-FLUSH-NEXT:    v_add_f32_e32 v3, v8, v8458; GCN-FLUSH-NEXT:    v_mul_f32_e32 v3, v7, v3459; GCN-FLUSH-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7]460; GCN-FLUSH-NEXT:    s_endpgm461  %load = load <4 x float>, ptr addrspace(1) %arg, align 16462  %neg = fneg <4 x float> %load463  %div = fdiv <4 x float> <float 2.000000e+00, float 1.000000e+00, float -1.000000e+00, float -2.000000e+00>, %neg, !fpmath !0464  store <4 x float> %div, ptr addrspace(1) %arg, align 16465  ret void466}467 468define amdgpu_kernel void @div_v_by_x_25ulp(ptr addrspace(1) %arg, float %num) {469; GCN-DENORM-LABEL: div_v_by_x_25ulp:470; GCN-DENORM:       ; %bb.0:471; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24472; GCN-DENORM-NEXT:    s_load_dword s2, s[4:5], 0x2c473; GCN-DENORM-NEXT:    v_mov_b32_e32 v0, 0474; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)475; GCN-DENORM-NEXT:    s_load_dword s3, s[0:1], 0x0476; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v2, s2477; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v3, s2478; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)479; GCN-DENORM-NEXT:    v_frexp_mant_f32_e32 v1, s3480; GCN-DENORM-NEXT:    v_rcp_f32_e32 v1, v1481; GCN-DENORM-NEXT:    v_frexp_exp_i32_f32_e32 v4, s3482; GCN-DENORM-NEXT:    v_sub_u32_e32 v2, v2, v4483; GCN-DENORM-NEXT:    v_mul_f32_e32 v1, v3, v1484; GCN-DENORM-NEXT:    v_ldexp_f32 v1, v1, v2485; GCN-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]486; GCN-DENORM-NEXT:    s_endpgm487;488; GCN-FLUSH-LABEL: div_v_by_x_25ulp:489; GCN-FLUSH:       ; %bb.0:490; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24491; GCN-FLUSH-NEXT:    s_load_dword s2, s[4:5], 0x2c492; GCN-FLUSH-NEXT:    v_mov_b32_e32 v0, 0x6f800000493; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0x2f800000494; GCN-FLUSH-NEXT:    v_mov_b32_e32 v2, 0495; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)496; GCN-FLUSH-NEXT:    s_load_dword s3, s[0:1], 0x0497; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)498; GCN-FLUSH-NEXT:    v_cmp_gt_f32_e64 vcc, |s3|, v0499; GCN-FLUSH-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc500; GCN-FLUSH-NEXT:    v_mul_f32_e32 v1, s3, v0501; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1502; GCN-FLUSH-NEXT:    v_mul_f32_e32 v1, s2, v1503; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v1504; GCN-FLUSH-NEXT:    global_store_dword v2, v0, s[0:1]505; GCN-FLUSH-NEXT:    s_endpgm506  %load = load float, ptr addrspace(1) %arg, align 4507  %div = fdiv float %num, %load, !fpmath !0508  store float %div, ptr addrspace(1) %arg, align 4509  ret void510}511 512define amdgpu_kernel void @div_1_by_x_fast(ptr addrspace(1) %arg) {513; GCN-LABEL: div_1_by_x_fast:514; GCN:       ; %bb.0:515; GCN-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24516; GCN-NEXT:    v_mov_b32_e32 v1, 0517; GCN-NEXT:    s_waitcnt lgkmcnt(0)518; GCN-NEXT:    s_load_dword s2, s[0:1], 0x0519; GCN-NEXT:    s_waitcnt lgkmcnt(0)520; GCN-NEXT:    v_rcp_f32_e32 v0, s2521; GCN-NEXT:    global_store_dword v1, v0, s[0:1]522; GCN-NEXT:    s_endpgm523  %load = load float, ptr addrspace(1) %arg, align 4524  %div = fdiv fast float 1.000000e+00, %load, !fpmath !0525  store float %div, ptr addrspace(1) %arg, align 4526  ret void527}528 529define amdgpu_kernel void @div_minus_1_by_x_fast(ptr addrspace(1) %arg) {530; GCN-DENORM-LABEL: div_minus_1_by_x_fast:531; GCN-DENORM:       ; %bb.0:532; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24533; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 0534; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)535; GCN-DENORM-NEXT:    s_load_dword s2, s[0:1], 0x0536; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)537; GCN-DENORM-NEXT:    v_rcp_f32_e64 v0, -s2538; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]539; GCN-DENORM-NEXT:    s_endpgm540;541; GCN-FLUSH-LABEL: div_minus_1_by_x_fast:542; GCN-FLUSH:       ; %bb.0:543; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24544; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0545; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)546; GCN-FLUSH-NEXT:    s_load_dword s2, s[0:1], 0x0547; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)548; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v0, s2549; GCN-FLUSH-NEXT:    v_sub_f32_e32 v0, 0x80000000, v0550; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]551; GCN-FLUSH-NEXT:    s_endpgm552  %load = load float, ptr addrspace(1) %arg, align 4553  %div = fdiv fast float -1.000000e+00, %load, !fpmath !0554  store float %div, ptr addrspace(1) %arg, align 4555  ret void556}557 558define amdgpu_kernel void @div_1_by_minus_x_fast(ptr addrspace(1) %arg) {559; GCN-LABEL: div_1_by_minus_x_fast:560; GCN:       ; %bb.0:561; GCN-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24562; GCN-NEXT:    v_mov_b32_e32 v1, 0563; GCN-NEXT:    s_waitcnt lgkmcnt(0)564; GCN-NEXT:    s_load_dword s2, s[0:1], 0x0565; GCN-NEXT:    s_waitcnt lgkmcnt(0)566; GCN-NEXT:    v_rcp_f32_e64 v0, -s2567; GCN-NEXT:    global_store_dword v1, v0, s[0:1]568; GCN-NEXT:    s_endpgm569  %load = load float, ptr addrspace(1) %arg, align 4570  %neg = fneg float %load, !fpmath !0571  %div = fdiv fast float 1.000000e+00, %neg572  store float %div, ptr addrspace(1) %arg, align 4573  ret void574}575 576define amdgpu_kernel void @div_minus_1_by_minus_x_fast(ptr addrspace(1) %arg) {577; GCN-DENORM-LABEL: div_minus_1_by_minus_x_fast:578; GCN-DENORM:       ; %bb.0:579; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24580; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 0581; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)582; GCN-DENORM-NEXT:    s_load_dword s2, s[0:1], 0x0583; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)584; GCN-DENORM-NEXT:    v_rcp_f32_e32 v0, s2585; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]586; GCN-DENORM-NEXT:    s_endpgm587;588; GCN-FLUSH-LABEL: div_minus_1_by_minus_x_fast:589; GCN-FLUSH:       ; %bb.0:590; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24591; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0592; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)593; GCN-FLUSH-NEXT:    s_load_dword s2, s[0:1], 0x0594; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)595; GCN-FLUSH-NEXT:    v_rcp_f32_e64 v0, -s2596; GCN-FLUSH-NEXT:    v_sub_f32_e32 v0, 0x80000000, v0597; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]598; GCN-FLUSH-NEXT:    s_endpgm599  %load = load float, ptr addrspace(1) %arg, align 4600  %neg = fsub float -0.000000e+00, %load, !fpmath !0601  %div = fdiv fast float -1.000000e+00, %neg602  store float %div, ptr addrspace(1) %arg, align 4603  ret void604}605 606define amdgpu_kernel void @div_1_by_x_correctly_rounded(ptr addrspace(1) %arg) {607; GCN-DENORM-LABEL: div_1_by_x_correctly_rounded:608; GCN-DENORM:       ; %bb.0:609; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24610; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)611; GCN-DENORM-NEXT:    s_load_dword s4, s[0:1], 0x0612; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)613; GCN-DENORM-NEXT:    v_div_scale_f32 v0, s[2:3], s4, s4, 1.0614; GCN-DENORM-NEXT:    v_div_scale_f32 v1, vcc, 1.0, s4, 1.0615; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v0616; GCN-DENORM-NEXT:    v_fma_f32 v3, -v0, v2, 1.0617; GCN-DENORM-NEXT:    v_fma_f32 v2, v3, v2, v2618; GCN-DENORM-NEXT:    v_mul_f32_e32 v3, v1, v2619; GCN-DENORM-NEXT:    v_fma_f32 v4, -v0, v3, v1620; GCN-DENORM-NEXT:    v_fma_f32 v3, v4, v2, v3621; GCN-DENORM-NEXT:    v_fma_f32 v0, -v0, v3, v1622; GCN-DENORM-NEXT:    v_div_fmas_f32 v0, v0, v2, v3623; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 0624; GCN-DENORM-NEXT:    v_div_fixup_f32 v0, v0, s4, 1.0625; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]626; GCN-DENORM-NEXT:    s_endpgm627;628; GCN-FLUSH-LABEL: div_1_by_x_correctly_rounded:629; GCN-FLUSH:       ; %bb.0:630; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24631; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)632; GCN-FLUSH-NEXT:    s_load_dword s4, s[0:1], 0x0633; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)634; GCN-FLUSH-NEXT:    v_div_scale_f32 v0, s[2:3], s4, s4, 1.0635; GCN-FLUSH-NEXT:    v_div_scale_f32 v1, vcc, 1.0, s4, 1.0636; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, v0637; GCN-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3638; GCN-FLUSH-NEXT:    v_fma_f32 v3, -v0, v2, 1.0639; GCN-FLUSH-NEXT:    v_fma_f32 v2, v3, v2, v2640; GCN-FLUSH-NEXT:    v_mul_f32_e32 v3, v1, v2641; GCN-FLUSH-NEXT:    v_fma_f32 v4, -v0, v3, v1642; GCN-FLUSH-NEXT:    v_fma_f32 v3, v4, v2, v3643; GCN-FLUSH-NEXT:    v_fma_f32 v0, -v0, v3, v1644; GCN-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0645; GCN-FLUSH-NEXT:    v_div_fmas_f32 v0, v0, v2, v3646; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0647; GCN-FLUSH-NEXT:    v_div_fixup_f32 v0, v0, s4, 1.0648; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]649; GCN-FLUSH-NEXT:    s_endpgm650  %load = load float, ptr addrspace(1) %arg, align 4651  %div = fdiv float 1.000000e+00, %load652  store float %div, ptr addrspace(1) %arg, align 4653  ret void654}655 656define amdgpu_kernel void @div_minus_1_by_x_correctly_rounded(ptr addrspace(1) %arg) {657; GCN-DENORM-LABEL: div_minus_1_by_x_correctly_rounded:658; GCN-DENORM:       ; %bb.0:659; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24660; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)661; GCN-DENORM-NEXT:    s_load_dword s4, s[0:1], 0x0662; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)663; GCN-DENORM-NEXT:    v_div_scale_f32 v0, s[2:3], s4, s4, -1.0664; GCN-DENORM-NEXT:    v_div_scale_f32 v1, vcc, -1.0, s4, -1.0665; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v0666; GCN-DENORM-NEXT:    v_fma_f32 v3, -v0, v2, 1.0667; GCN-DENORM-NEXT:    v_fma_f32 v2, v3, v2, v2668; GCN-DENORM-NEXT:    v_mul_f32_e32 v3, v1, v2669; GCN-DENORM-NEXT:    v_fma_f32 v4, -v0, v3, v1670; GCN-DENORM-NEXT:    v_fma_f32 v3, v4, v2, v3671; GCN-DENORM-NEXT:    v_fma_f32 v0, -v0, v3, v1672; GCN-DENORM-NEXT:    v_div_fmas_f32 v0, v0, v2, v3673; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 0674; GCN-DENORM-NEXT:    v_div_fixup_f32 v0, v0, s4, -1.0675; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]676; GCN-DENORM-NEXT:    s_endpgm677;678; GCN-FLUSH-LABEL: div_minus_1_by_x_correctly_rounded:679; GCN-FLUSH:       ; %bb.0:680; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24681; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)682; GCN-FLUSH-NEXT:    s_load_dword s4, s[0:1], 0x0683; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)684; GCN-FLUSH-NEXT:    v_div_scale_f32 v0, s[2:3], s4, s4, -1.0685; GCN-FLUSH-NEXT:    v_div_scale_f32 v1, vcc, -1.0, s4, -1.0686; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, v0687; GCN-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3688; GCN-FLUSH-NEXT:    v_fma_f32 v3, -v0, v2, 1.0689; GCN-FLUSH-NEXT:    v_fma_f32 v2, v3, v2, v2690; GCN-FLUSH-NEXT:    v_mul_f32_e32 v3, v1, v2691; GCN-FLUSH-NEXT:    v_fma_f32 v4, -v0, v3, v1692; GCN-FLUSH-NEXT:    v_fma_f32 v3, v4, v2, v3693; GCN-FLUSH-NEXT:    v_fma_f32 v0, -v0, v3, v1694; GCN-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0695; GCN-FLUSH-NEXT:    v_div_fmas_f32 v0, v0, v2, v3696; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0697; GCN-FLUSH-NEXT:    v_div_fixup_f32 v0, v0, s4, -1.0698; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]699; GCN-FLUSH-NEXT:    s_endpgm700  %load = load float, ptr addrspace(1) %arg, align 4701  %div = fdiv float -1.000000e+00, %load702  store float %div, ptr addrspace(1) %arg, align 4703  ret void704}705 706define amdgpu_kernel void @div_1_by_minus_x_correctly_rounded(ptr addrspace(1) %arg) {707; GCN-DENORM-LABEL: div_1_by_minus_x_correctly_rounded:708; GCN-DENORM:       ; %bb.0:709; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24710; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)711; GCN-DENORM-NEXT:    s_load_dword s4, s[0:1], 0x0712; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)713; GCN-DENORM-NEXT:    v_div_scale_f32 v0, s[2:3], s4, s4, -1.0714; GCN-DENORM-NEXT:    v_div_scale_f32 v1, vcc, -1.0, s4, -1.0715; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v0716; GCN-DENORM-NEXT:    v_fma_f32 v3, -v0, v2, 1.0717; GCN-DENORM-NEXT:    v_fma_f32 v2, v3, v2, v2718; GCN-DENORM-NEXT:    v_mul_f32_e32 v3, v1, v2719; GCN-DENORM-NEXT:    v_fma_f32 v4, -v0, v3, v1720; GCN-DENORM-NEXT:    v_fma_f32 v3, v4, v2, v3721; GCN-DENORM-NEXT:    v_fma_f32 v0, -v0, v3, v1722; GCN-DENORM-NEXT:    v_div_fmas_f32 v0, v0, v2, v3723; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 0724; GCN-DENORM-NEXT:    v_div_fixup_f32 v0, v0, s4, -1.0725; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]726; GCN-DENORM-NEXT:    s_endpgm727;728; GCN-FLUSH-LABEL: div_1_by_minus_x_correctly_rounded:729; GCN-FLUSH:       ; %bb.0:730; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24731; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)732; GCN-FLUSH-NEXT:    s_load_dword s4, s[0:1], 0x0733; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)734; GCN-FLUSH-NEXT:    v_div_scale_f32 v0, s[2:3], -s4, -s4, 1.0735; GCN-FLUSH-NEXT:    v_div_scale_f32 v1, vcc, 1.0, -s4, 1.0736; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, v0737; GCN-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3738; GCN-FLUSH-NEXT:    v_fma_f32 v3, -v0, v2, 1.0739; GCN-FLUSH-NEXT:    v_fma_f32 v2, v3, v2, v2740; GCN-FLUSH-NEXT:    v_mul_f32_e32 v3, v1, v2741; GCN-FLUSH-NEXT:    v_fma_f32 v4, -v0, v3, v1742; GCN-FLUSH-NEXT:    v_fma_f32 v3, v4, v2, v3743; GCN-FLUSH-NEXT:    v_fma_f32 v0, -v0, v3, v1744; GCN-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0745; GCN-FLUSH-NEXT:    v_div_fmas_f32 v0, v0, v2, v3746; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0747; GCN-FLUSH-NEXT:    v_div_fixup_f32 v0, v0, -s4, 1.0748; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]749; GCN-FLUSH-NEXT:    s_endpgm750  %load = load float, ptr addrspace(1) %arg, align 4751  %neg = fsub float -0.000000e+00, %load752  %div = fdiv float 1.000000e+00, %neg753  store float %div, ptr addrspace(1) %arg, align 4754  ret void755}756 757define amdgpu_kernel void @div_minus_1_by_minus_x_correctly_rounded(ptr addrspace(1) %arg) {758; GCN-DENORM-LABEL: div_minus_1_by_minus_x_correctly_rounded:759; GCN-DENORM:       ; %bb.0:760; GCN-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24761; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)762; GCN-DENORM-NEXT:    s_load_dword s4, s[0:1], 0x0763; GCN-DENORM-NEXT:    s_waitcnt lgkmcnt(0)764; GCN-DENORM-NEXT:    v_div_scale_f32 v0, s[2:3], s4, s4, 1.0765; GCN-DENORM-NEXT:    v_div_scale_f32 v1, vcc, 1.0, s4, 1.0766; GCN-DENORM-NEXT:    v_rcp_f32_e32 v2, v0767; GCN-DENORM-NEXT:    v_fma_f32 v3, -v0, v2, 1.0768; GCN-DENORM-NEXT:    v_fma_f32 v2, v3, v2, v2769; GCN-DENORM-NEXT:    v_mul_f32_e32 v3, v1, v2770; GCN-DENORM-NEXT:    v_fma_f32 v4, -v0, v3, v1771; GCN-DENORM-NEXT:    v_fma_f32 v3, v4, v2, v3772; GCN-DENORM-NEXT:    v_fma_f32 v0, -v0, v3, v1773; GCN-DENORM-NEXT:    v_div_fmas_f32 v0, v0, v2, v3774; GCN-DENORM-NEXT:    v_mov_b32_e32 v1, 0775; GCN-DENORM-NEXT:    v_div_fixup_f32 v0, v0, s4, 1.0776; GCN-DENORM-NEXT:    global_store_dword v1, v0, s[0:1]777; GCN-DENORM-NEXT:    s_endpgm778;779; GCN-FLUSH-LABEL: div_minus_1_by_minus_x_correctly_rounded:780; GCN-FLUSH:       ; %bb.0:781; GCN-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24782; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)783; GCN-FLUSH-NEXT:    s_load_dword s4, s[0:1], 0x0784; GCN-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)785; GCN-FLUSH-NEXT:    v_div_scale_f32 v0, s[2:3], -s4, -s4, -1.0786; GCN-FLUSH-NEXT:    v_div_scale_f32 v1, vcc, -1.0, -s4, -1.0787; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, v0788; GCN-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3789; GCN-FLUSH-NEXT:    v_fma_f32 v3, -v0, v2, 1.0790; GCN-FLUSH-NEXT:    v_fma_f32 v2, v3, v2, v2791; GCN-FLUSH-NEXT:    v_mul_f32_e32 v3, v1, v2792; GCN-FLUSH-NEXT:    v_fma_f32 v4, -v0, v3, v1793; GCN-FLUSH-NEXT:    v_fma_f32 v3, v4, v2, v3794; GCN-FLUSH-NEXT:    v_fma_f32 v0, -v0, v3, v1795; GCN-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0796; GCN-FLUSH-NEXT:    v_div_fmas_f32 v0, v0, v2, v3797; GCN-FLUSH-NEXT:    v_mov_b32_e32 v1, 0798; GCN-FLUSH-NEXT:    v_div_fixup_f32 v0, v0, -s4, -1.0799; GCN-FLUSH-NEXT:    global_store_dword v1, v0, s[0:1]800; GCN-FLUSH-NEXT:    s_endpgm801  %load = load float, ptr addrspace(1) %arg, align 4802  %neg = fsub float -0.000000e+00, %load803  %div = fdiv float -1.000000e+00, %neg804  store float %div, ptr addrspace(1) %arg, align 4805  ret void806}807 808!0 = !{float 2.500000e+00}809