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 define float @none(float %x, float %y) { 11 entry: 12 ; CHECK: %vec = load <3 x float>, <3 x float>* @vec 13 %vec = load <3 x float>, <3 x float>* @vec 14 ; CHECK: %select = load i1, i1* @select 15 %select = load i1, i1* @select 16 ; CHECK: %arr = load [3 x float], [3 x float]* @arr 17 %arr = load [3 x float], [3 x float]* @arr 18 19 ; CHECK: %a = fadd float %x, %y 20 %a = fadd float %x, %y 21 ; CHECK: %a_vec = fadd <3 x float> %vec, %vec 22 %a_vec = fadd <3 x float> %vec, %vec 23 ; CHECK: %b = fsub float %x, %y 24 %b = fsub float %x, %y 25 ; CHECK: %b_vec = fsub <3 x float> %vec, %vec 26 %b_vec = fsub <3 x float> %vec, %vec 27 ; CHECK: %c = fmul float %x, %y 28 %c = fmul float %x, %y 29 ; CHECK: %c_vec = fmul <3 x float> %vec, %vec 30 %c_vec = fmul <3 x float> %vec, %vec 31 ; CHECK: %d = fdiv float %x, %y 32 %d = fdiv float %x, %y 33 ; CHECK: %d_vec = fdiv <3 x float> %vec, %vec 34 %d_vec = fdiv <3 x float> %vec, %vec 35 ; CHECK: %e = frem float %x, %y 36 %e = frem float %x, %y 37 ; CHECK: %e_vec = frem <3 x float> %vec, %vec 38 %e_vec = frem <3 x float> %vec, %vec 39 ; CHECK: ret float %e 40 ret float %e 41 } 42 43 ; CHECK: no_nan 44 define float @no_nan(float %x, float %y) { 45 entry: 46 ; CHECK: %vec = load <3 x float>, <3 x float>* @vec 47 %vec = load <3 x float>, <3 x float>* @vec 48 ; CHECK: %select = load i1, i1* @select 49 %select = load i1, i1* @select 50 ; CHECK: %arr = load [3 x float], [3 x float]* @arr 51 %arr = load [3 x float], [3 x float]* @arr 52 53 ; CHECK: %a = fadd nnan float %x, %y 54 %a = fadd nnan float %x, %y 55 ; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec 56 %a_vec = fadd nnan <3 x float> %vec, %vec 57 ; CHECK: %b = fsub nnan float %x, %y 58 %b = fsub nnan float %x, %y 59 ; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec 60 %b_vec = fsub nnan <3 x float> %vec, %vec 61 ; CHECK: %c = fmul nnan float %x, %y 62 %c = fmul nnan float %x, %y 63 ; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec 64 %c_vec = fmul nnan <3 x float> %vec, %vec 65 ; CHECK: %d = fdiv nnan float %x, %y 66 %d = fdiv nnan float %x, %y 67 ; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec 68 %d_vec = fdiv nnan <3 x float> %vec, %vec 69 ; CHECK: %e = frem nnan float %x, %y 70 %e = frem nnan float %x, %y 71 ; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec 72 %e_vec = frem nnan <3 x float> %vec, %vec 73 ; CHECK: ret float %e 74 ret float %e 75 } 76 77 ; CHECK: no_nan_inf 78 define float @no_nan_inf(float %x, float %y) { 79 entry: 80 ; CHECK: %vec = load <3 x float>, <3 x float>* @vec 81 %vec = load <3 x float>, <3 x float>* @vec 82 ; CHECK: %select = load i1, i1* @select 83 %select = load i1, i1* @select 84 ; CHECK: %arr = load [3 x float], [3 x float]* @arr 85 %arr = load [3 x float], [3 x float]* @arr 86 87 ; CHECK: %a = fadd nnan ninf float %x, %y 88 %a = fadd ninf nnan float %x, %y 89 ; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec 90 %a_vec = fadd nnan <3 x float> %vec, %vec 91 ; CHECK: %b = fsub nnan float %x, %y 92 %b = fsub nnan float %x, %y 93 ; CHECK: %b_vec = fsub nnan ninf <3 x float> %vec, %vec 94 %b_vec = fsub ninf nnan <3 x float> %vec, %vec 95 ; CHECK: %c = fmul nnan float %x, %y 96 %c = fmul nnan float %x, %y 97 ; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec 98 %c_vec = fmul nnan <3 x float> %vec, %vec 99 ; CHECK: %d = fdiv nnan ninf float %x, %y 100 %d = fdiv ninf nnan float %x, %y 101 ; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec 102 %d_vec = fdiv nnan <3 x float> %vec, %vec 103 ; CHECK: %e = frem nnan float %x, %y 104 %e = frem nnan float %x, %y 105 ; CHECK: %e_vec = frem nnan ninf <3 x float> %vec, %vec 106 %e_vec = frem ninf nnan <3 x float> %vec, %vec 107 ; CHECK: ret float %e 108 ret float %e 109 } 110 111 ; CHECK: mixed_flags 112 define float @mixed_flags(float %x, float %y) { 113 entry: 114 ; CHECK: %vec = load <3 x float>, <3 x float>* @vec 115 %vec = load <3 x float>, <3 x float>* @vec 116 ; CHECK: %select = load i1, i1* @select 117 %select = load i1, i1* @select 118 ; CHECK: %arr = load [3 x float], [3 x float]* @arr 119 %arr = load [3 x float], [3 x float]* @arr 120 121 ; CHECK: %a = fadd nnan ninf float %x, %y 122 %a = fadd ninf nnan float %x, %y 123 ; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec 124 %a_vec = fadd nnan <3 x float> %vec, %vec 125 ; CHECK: %b = fsub fast float %x, %y 126 %b = fsub nnan nsz fast float %x, %y 127 ; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec 128 %b_vec = fsub nnan <3 x float> %vec, %vec 129 ; CHECK: %c = fmul fast float %x, %y 130 %c = fmul nsz fast arcp float %x, %y 131 ; CHECK: %c_vec = fmul nsz <3 x float> %vec, %vec 132 %c_vec = fmul nsz <3 x float> %vec, %vec 133 ; CHECK: %d = fdiv nnan ninf arcp float %x, %y 134 %d = fdiv arcp ninf nnan float %x, %y 135 ; CHECK: %d_vec = fdiv fast <3 x float> %vec, %vec 136 %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec 137 ; CHECK: %e = frem nnan nsz float %x, %y 138 %e = frem nnan nsz float %x, %y 139 ; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec 140 %e_vec = frem nnan <3 x float> %vec, %vec 141 ; CHECK: ret float %e 142 ret float %e 143 } 144