1; RUN: llvm-as < %s | llvm-dis | FileCheck %s 2; RUN: opt -S < %s | FileCheck %s 3; RUN: verify-uselistorder %s 4 5@addr = external global i64 6@select = external global i1 7@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>, <3 x float>* @vec 15 %vec = load <3 x float>, <3 x float>* @vec 16; CHECK: %select = load i1, i1* @select 17 %select = load i1, i1* @select 18; CHECK: %arr = load [3 x float], [3 x float]* @arr 19 %arr = load [3 x float], [3 x float]* @arr 20 21; CHECK: %a = fadd float %x, %y 22 %a = fadd float %x, %y 23; CHECK: %a_vec = fadd <3 x float> %vec, %vec 24 %a_vec = fadd <3 x float> %vec, %vec 25; CHECK: %b = fsub float %x, %y 26 %b = fsub float %x, %y 27; CHECK: %b_vec = fsub <3 x float> %vec, %vec 28 %b_vec = fsub <3 x float> %vec, %vec 29; CHECK: %c = fmul float %x, %y 30 %c = fmul float %x, %y 31; CHECK: %c_vec = fmul <3 x float> %vec, %vec 32 %c_vec = fmul <3 x float> %vec, %vec 33; CHECK: %d = fdiv float %x, %y 34 %d = fdiv float %x, %y 35; CHECK: %d_vec = fdiv <3 x float> %vec, %vec 36 %d_vec = fdiv <3 x float> %vec, %vec 37; CHECK: %e = frem float %x, %y 38 %e = frem float %x, %y 39; CHECK: %e_vec = frem <3 x float> %vec, %vec 40 %e_vec = frem <3 x float> %vec, %vec 41; CHECK: ret float %e 42 ret float %e 43} 44 45; CHECK: no_nan 46define float @no_nan(float %x, float %y) { 47entry: 48; CHECK: %vec = load <3 x float>, <3 x float>* @vec 49 %vec = load <3 x float>, <3 x float>* @vec 50; CHECK: %select = load i1, i1* @select 51 %select = load i1, i1* @select 52; CHECK: %arr = load [3 x float], [3 x float]* @arr 53 %arr = load [3 x float], [3 x float]* @arr 54 55; CHECK: %a = fadd nnan float %x, %y 56 %a = fadd nnan float %x, %y 57; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec 58 %a_vec = fadd nnan <3 x float> %vec, %vec 59; CHECK: %b = fsub nnan float %x, %y 60 %b = fsub nnan float %x, %y 61; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec 62 %b_vec = fsub nnan <3 x float> %vec, %vec 63; CHECK: %c = fmul nnan float %x, %y 64 %c = fmul nnan float %x, %y 65; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec 66 %c_vec = fmul nnan <3 x float> %vec, %vec 67; CHECK: %d = fdiv nnan float %x, %y 68 %d = fdiv nnan float %x, %y 69; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec 70 %d_vec = fdiv nnan <3 x float> %vec, %vec 71; CHECK: %e = frem nnan float %x, %y 72 %e = frem nnan float %x, %y 73; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec 74 %e_vec = frem nnan <3 x float> %vec, %vec 75; CHECK: ret float %e 76 ret float %e 77} 78 79; CHECK: @contract( 80define float @contract(float %x, float %y) { 81entry: 82; CHECK: %a = fsub contract float %x, %y 83 %a = fsub contract float %x, %y 84; CHECK: %b = fadd contract float %x, %y 85 %b = fadd contract float %x, %y 86; CHECK: %c = fmul contract float %a, %b 87 %c = fmul contract float %a, %b 88 ret float %c 89} 90 91; CHECK: @reassoc( 92define float @reassoc(float %x, float %y) { 93; CHECK: %a = fsub reassoc float %x, %y 94 %a = fsub reassoc float %x, %y 95; CHECK: %b = fmul reassoc float %x, %y 96 %b = fmul reassoc float %x, %y 97; CHECK: %c = call reassoc float @foo(float %b) 98 %c = call reassoc float @foo(float %b) 99 ret float %c 100} 101 102; CHECK: @afn( 103define float @afn(float %x, float %y) { 104; CHECK: %a = fdiv afn float %x, %y 105 %a = fdiv afn float %x, %y 106; CHECK: %b = frem afn float %x, %y 107 %b = frem afn float %x, %y 108; CHECK: %c = call afn float @foo(float %b) 109 %c = call afn float @foo(float %b) 110 ret float %c 111} 112 113; CHECK: no_nan_inf 114define float @no_nan_inf(float %x, float %y) { 115entry: 116; CHECK: %vec = load <3 x float>, <3 x float>* @vec 117 %vec = load <3 x float>, <3 x float>* @vec 118; CHECK: %select = load i1, i1* @select 119 %select = load i1, i1* @select 120; CHECK: %arr = load [3 x float], [3 x float]* @arr 121 %arr = load [3 x float], [3 x float]* @arr 122 123; CHECK: %a = fadd nnan ninf float %x, %y 124 %a = fadd ninf nnan float %x, %y 125; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec 126 %a_vec = fadd nnan <3 x float> %vec, %vec 127; CHECK: %b = fsub nnan float %x, %y 128 %b = fsub nnan float %x, %y 129; CHECK: %b_vec = fsub nnan ninf <3 x float> %vec, %vec 130 %b_vec = fsub ninf nnan <3 x float> %vec, %vec 131; CHECK: %c = fmul nnan float %x, %y 132 %c = fmul nnan float %x, %y 133; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec 134 %c_vec = fmul nnan <3 x float> %vec, %vec 135; CHECK: %d = fdiv nnan ninf float %x, %y 136 %d = fdiv ninf nnan float %x, %y 137; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec 138 %d_vec = fdiv nnan <3 x float> %vec, %vec 139; CHECK: %e = frem nnan float %x, %y 140 %e = frem nnan float %x, %y 141; CHECK: %e_vec = frem nnan ninf <3 x float> %vec, %vec 142 %e_vec = frem ninf nnan <3 x float> %vec, %vec 143; CHECK: ret float %e 144 ret float %e 145} 146 147; CHECK: mixed_flags 148define float @mixed_flags(float %x, float %y) { 149entry: 150; CHECK: %vec = load <3 x float>, <3 x float>* @vec 151 %vec = load <3 x float>, <3 x float>* @vec 152; CHECK: %select = load i1, i1* @select 153 %select = load i1, i1* @select 154; CHECK: %arr = load [3 x float], [3 x float]* @arr 155 %arr = load [3 x float], [3 x float]* @arr 156 157; CHECK: %a = fadd nnan ninf afn float %x, %y 158 %a = fadd ninf nnan afn float %x, %y 159; CHECK: %a_vec = fadd reassoc nnan <3 x float> %vec, %vec 160 %a_vec = fadd reassoc nnan <3 x float> %vec, %vec 161; CHECK: %b = fsub fast float %x, %y 162 %b = fsub nnan nsz fast float %x, %y 163; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec 164 %b_vec = fsub nnan <3 x float> %vec, %vec 165; CHECK: %c = fmul fast float %x, %y 166 %c = fmul nsz fast arcp float %x, %y 167; CHECK: %c_vec = fmul nsz <3 x float> %vec, %vec 168 %c_vec = fmul nsz <3 x float> %vec, %vec 169; CHECK: %d = fdiv nnan ninf arcp float %x, %y 170 %d = fdiv arcp ninf nnan float %x, %y 171; CHECK: %d_vec = fdiv fast <3 x float> %vec, %vec 172 %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec 173; CHECK: %e = frem nnan nsz float %x, %y 174 %e = frem nnan nsz float %x, %y 175; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec 176 %e_vec = frem nnan <3 x float> %vec, %vec 177; CHECK: ret float %e 178 ret float %e 179} 180