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