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