269 lines · plain
1; RUN: llvm-as < %s | llvm-dis | FileCheck -strict-whitespace %s2; RUN: opt -S < %s | FileCheck -strict-whitespace %s3; RUN: verify-uselistorder %s4 5@addr = external global i646@select = external global i17@vec = external global <3 x float>8@arr = external global [3 x float]9 10declare float @foo(float)11 12define float @none(float %x, float %y) {13entry:14; CHECK: %vec = load <3 x float>, ptr @vec15 %vec = load <3 x float>, ptr @vec16; CHECK: %select = load i1, ptr @select17 %select = load i1, ptr @select18; CHECK: %arr = load [3 x float], ptr @arr19 %arr = load [3 x float], ptr @arr20; CHECK: %scalable = load <vscale x 3 x float>, ptr @vec21 %scalable = load <vscale x 3 x float>, ptr @vec22 23; CHECK: %a = fadd float %x, %y24 %a = fadd float %x, %y25; CHECK: %a_vec = fadd <3 x float> %vec, %vec26 %a_vec = fadd <3 x float> %vec, %vec27; CHECK: %b = fsub float %x, %y28 %b = fsub float %x, %y29; CHECK: %b_vec = fsub <3 x float> %vec, %vec30 %b_vec = fsub <3 x float> %vec, %vec31; CHECK: %c = fmul float %x, %y32 %c = fmul float %x, %y33; CHECK: %c_vec = fmul <3 x float> %vec, %vec34 %c_vec = fmul <3 x float> %vec, %vec35; CHECK: %d = fdiv float %x, %y36 %d = fdiv float %x, %y37; CHECK: %d_vec = fdiv <3 x float> %vec, %vec38 %d_vec = fdiv <3 x float> %vec, %vec39; CHECK: %e = frem float %x, %y40 %e = frem float %x, %y41; CHECK: %e_vec = frem <3 x float> %vec, %vec42 %e_vec = frem <3 x float> %vec, %vec43; CHECK: %f = fneg float %x44 %f = fneg float %x45; CHECK: %f_vec = fneg <3 x float> %vec46 %f_vec = fneg <3 x float> %vec47; CHECK: %g = fpext float %x to double48 %g = fpext float %x to double49; CHECK: %g_vec = fpext <3 x float> %vec to <3 x double>50 %g_vec = fpext <3 x float> %vec to <3 x double>51; CHECK: %g_scalable = fpext <vscale x 3 x float> %scalable to <vscale x 3 x double>52 %g_scalable = fpext <vscale x 3 x float> %scalable to <vscale x 3 x double>53; CHECK: %h = fptrunc float %x to half54 %h = fptrunc float %x to half55; CHECK: %h_vec = fptrunc <3 x float> %vec to <3 x half>56 %h_vec = fptrunc <3 x float> %vec to <3 x half>57; CHECK: %h_scalable = fptrunc <vscale x 3 x float> %scalable to <vscale x 3 x half>58 %h_scalable = fptrunc <vscale x 3 x float> %scalable to <vscale x 3 x half>59; CHECK: ret float %f60 ret float %f61}62 63; CHECK: no_nan64define float @no_nan(float %x, float %y) {65entry:66; CHECK: %vec = load <3 x float>, ptr @vec67 %vec = load <3 x float>, ptr @vec68; CHECK: %select = load i1, ptr @select69 %select = load i1, ptr @select70; CHECK: %arr = load [3 x float], ptr @arr71 %arr = load [3 x float], ptr @arr72; CHECK: %scalable = load <vscale x 3 x float>, ptr @vec73 %scalable = load <vscale x 3 x float>, ptr @vec74 75; CHECK: %a = fadd nnan float %x, %y76 %a = fadd nnan float %x, %y77; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec78 %a_vec = fadd nnan <3 x float> %vec, %vec79; CHECK: %b = fsub nnan float %x, %y80 %b = fsub nnan float %x, %y81; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec82 %b_vec = fsub nnan <3 x float> %vec, %vec83; CHECK: %c = fmul nnan float %x, %y84 %c = fmul nnan float %x, %y85; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec86 %c_vec = fmul nnan <3 x float> %vec, %vec87; CHECK: %d = fdiv nnan float %x, %y88 %d = fdiv nnan float %x, %y89; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec90 %d_vec = fdiv nnan <3 x float> %vec, %vec91; CHECK: %e = frem nnan float %x, %y92 %e = frem nnan float %x, %y93; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec94 %e_vec = frem nnan <3 x float> %vec, %vec95; CHECK: %f = fneg nnan float %x96 %f = fneg nnan float %x97; CHECK: %f_vec = fneg nnan <3 x float> %vec98 %f_vec = fneg nnan <3 x float> %vec99; CHECK: %g = fpext nnan float %x to double100 %g = fpext nnan float %x to double101; CHECK: %g_vec = fpext nnan <3 x float> %vec to <3 x double>102 %g_vec = fpext nnan <3 x float> %vec to <3 x double>103; CHECK: %g_scalable = fpext nnan <vscale x 3 x float> %scalable to <vscale x 3 x double>104 %g_scalable = fpext nnan <vscale x 3 x float> %scalable to <vscale x 3 x double>105; CHECK: %h = fptrunc nnan float %x to half106 %h = fptrunc nnan float %x to half107; CHECK: %h_vec = fptrunc nnan <3 x float> %vec to <3 x half>108 %h_vec = fptrunc nnan <3 x float> %vec to <3 x half>109; CHECK: %h_scalable = fptrunc nnan <vscale x 3 x float> %scalable to <vscale x 3 x half>110 %h_scalable = fptrunc nnan <vscale x 3 x float> %scalable to <vscale x 3 x half>111; CHECK: ret float %f112 ret float %f113}114 115; CHECK: @contract(116define float @contract(float %x, float %y) {117entry:118; CHECK: %a = fsub contract float %x, %y119 %a = fsub contract float %x, %y120; CHECK: %b = fadd contract float %x, %y121 %b = fadd contract float %x, %y122; CHECK: %c = fmul contract float %a, %b123 %c = fmul contract float %a, %b124; CHECK: %d = fpext contract float %x to double125 %d = fpext contract float %x to double126; CHECK: %e = fptrunc contract float %x to half127 %e = fptrunc contract float %x to half128 ret float %c129}130 131; CHECK: @reassoc(132define float @reassoc(float %x, float %y) {133; CHECK: %a = fsub reassoc float %x, %y134 %a = fsub reassoc float %x, %y135; CHECK: %b = fmul reassoc float %x, %y136 %b = fmul reassoc float %x, %y137; CHECK: %c = call reassoc float @foo(float %b)138 %c = call reassoc float @foo(float %b)139; CHECK: %d = fpext reassoc float %x to double140 %d = fpext reassoc float %x to double141; CHECK: %e = fptrunc reassoc float %x to half142 %e = fptrunc reassoc float %x to half143 ret float %c144}145 146; CHECK: @afn(147define float @afn(float %x, float %y) {148; CHECK: %a = fdiv afn float %x, %y149 %a = fdiv afn float %x, %y150; CHECK: %b = frem afn float %x, %y151 %b = frem afn float %x, %y152; CHECK: %c = call afn float @foo(float %b)153 %c = call afn float @foo(float %b)154 ret float %c155}156 157; CHECK: no_nan_inf158define float @no_nan_inf(float %x, float %y) {159entry:160; CHECK: %vec = load <3 x float>, ptr @vec161 %vec = load <3 x float>, ptr @vec162; CHECK: %select = load i1, ptr @select163 %select = load i1, ptr @select164; CHECK: %arr = load [3 x float], ptr @arr165 %arr = load [3 x float], ptr @arr166; CHECK: %scalable = load <vscale x 3 x float>, ptr @vec167 %scalable = load <vscale x 3 x float>, ptr @vec168 169; CHECK: %a = fadd nnan ninf float %x, %y170 %a = fadd ninf nnan float %x, %y171; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec172 %a_vec = fadd nnan <3 x float> %vec, %vec173; CHECK: %b = fsub nnan float %x, %y174 %b = fsub nnan float %x, %y175; CHECK: %b_vec = fsub nnan ninf <3 x float> %vec, %vec176 %b_vec = fsub ninf nnan <3 x float> %vec, %vec177; CHECK: %c = fmul nnan float %x, %y178 %c = fmul nnan float %x, %y179; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec180 %c_vec = fmul nnan <3 x float> %vec, %vec181; CHECK: %d = fdiv nnan ninf float %x, %y182 %d = fdiv ninf nnan float %x, %y183; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec184 %d_vec = fdiv nnan <3 x float> %vec, %vec185; CHECK: %e = frem nnan float %x, %y186 %e = frem nnan float %x, %y187; CHECK: %e_vec = frem nnan ninf <3 x float> %vec, %vec188 %e_vec = frem ninf nnan <3 x float> %vec, %vec189; CHECK: %f = fpext nnan ninf float %x to double190 %f = fpext ninf nnan float %x to double191; CHECK: %f_vec = fpext nnan ninf <3 x float> %vec to <3 x double>192 %f_vec = fpext ninf nnan <3 x float> %vec to <3 x double>193; CHECK: %f_scalable = fpext nnan ninf <vscale x 3 x float> %scalable to <vscale x 3 x double>194 %f_scalable = fpext ninf nnan <vscale x 3 x float> %scalable to <vscale x 3 x double>195; CHECK: %g = fptrunc nnan ninf float %x to half196 %g = fptrunc ninf nnan float %x to half197; CHECK: %g_vec = fptrunc nnan ninf <3 x float> %vec to <3 x half>198 %g_vec = fptrunc ninf nnan <3 x float> %vec to <3 x half>199; CHECK: %g_scalable = fptrunc nnan ninf <vscale x 3 x float> %scalable to <vscale x 3 x half>200 %g_scalable = fptrunc ninf nnan <vscale x 3 x float> %scalable to <vscale x 3 x half>201; CHECK: ret float %e202 ret float %e203}204 205; CHECK: mixed_flags206define float @mixed_flags(float %x, float %y) {207entry:208; CHECK: %vec = load <3 x float>, ptr @vec209 %vec = load <3 x float>, ptr @vec210; CHECK: %select = load i1, ptr @select211 %select = load i1, ptr @select212; CHECK: %arr = load [3 x float], ptr @arr213 %arr = load [3 x float], ptr @arr214 215; CHECK: %a = fadd nnan ninf afn float %x, %y216 %a = fadd ninf nnan afn float %x, %y217; CHECK: %a_vec = fadd reassoc nnan <3 x float> %vec, %vec218 %a_vec = fadd reassoc nnan <3 x float> %vec, %vec219; CHECK: %b = fsub fast float %x, %y220 %b = fsub nnan nsz fast float %x, %y221; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec222 %b_vec = fsub nnan <3 x float> %vec, %vec223; CHECK: %c = fmul fast float %x, %y224 %c = fmul nsz fast arcp float %x, %y225; CHECK: %c_vec = fmul nsz <3 x float> %vec, %vec226 %c_vec = fmul nsz <3 x float> %vec, %vec227; CHECK: %d = fdiv nnan ninf arcp float %x, %y228 %d = fdiv arcp ninf nnan float %x, %y229; CHECK: %d_vec = fdiv fast <3 x float> %vec, %vec230 %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec231; CHECK: %e = frem nnan nsz float %x, %y232 %e = frem nnan nsz float %x, %y233; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec234 %e_vec = frem nnan <3 x float> %vec, %vec235; CHECK: %f = fneg nnan nsz float %x236 %f = fneg nnan nsz float %x237; CHECK: %f_vec = fneg fast <3 x float> %vec238 %f_vec = fneg fast <3 x float> %vec239; CHECK: ret float %f240 ret float %f241}242 243; CHECK: @fmf_calls(244define float @fmf_calls(float %x, float %y) {245entry:246; CHECK: %vec = load <3 x float>, ptr @vec247 %vec = load <3 x float>, ptr @vec248; CHECK: %select = load i1, ptr @select249 %select = load i1, ptr @select250; CHECK: %arr = load [3 x float], ptr @arr251 %arr = load [3 x float], ptr @arr252 253; CHECK: %a = call nnan ninf afn float @extfunc(float %x, float %y)254 %a = call ninf nnan afn float @extfunc(float %x, float %y)255; CHECK: %a_vec = call reassoc nnan <3 x float> @extfunc_vec(<3 x float> %vec, <3 x float> %vec)256 %a_vec = call reassoc nnan <3 x float> @extfunc_vec(<3 x float> %vec, <3 x float> %vec)257; CHECK: %b = call nnan ninf afn float (...) @var_extfunc(float %x, float %y)258 %b = call ninf nnan afn float (...) @var_extfunc(float %x, float %y)259; CHECK: %b_vec = call reassoc nnan <3 x float> (...) @var_extfunc_vec(<3 x float> %vec, <3 x float> %vec)260 %b_vec = call reassoc nnan <3 x float> (...) @var_extfunc_vec(<3 x float> %vec, <3 x float> %vec)261; CHECK: ret float %a262 ret float %a263}264 265declare float @extfunc(float, float)266declare <3 x float> @extfunc_vec(<3 x float>, <3 x float>)267declare float @var_extfunc(...)268declare <3 x float> @var_extfunc_vec(...)269