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 10 declare float @foo(float) 11 12 define float @none(float %x, float %y) { 13 entry: 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 46 define float @no_nan(float %x, float %y) { 47 entry: 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( 80 define float @contract(float %x, float %y) { 81 entry: 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( 92 define 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( 103 define 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 114 define float @no_nan_inf(float %x, float %y) { 115 entry: 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 148 define float @mixed_flags(float %x, float %y) { 149 entry: 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