reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146
  147
  148
  149
  150
  151
  152
  153
  154
  155
  156
  157
  158
  159
  160
  161
  162
  163
  164
  165
  166
  167
  168
  169
  170
  171
  172
  173
  174
  175
  176
  177
  178
  179
  180
  181
  182
  183
  184
  185
  186
  187
  188
  189
  190
  191
; RUN: llvm-as < %s | llvm-dis | FileCheck -strict-whitespace %s
; RUN: opt -S < %s | FileCheck -strict-whitespace %s
; RUN: verify-uselistorder %s

@addr   = external global i64
@select = external global i1
@vec    = external global <3 x float>
@arr    = external global [3 x float]

declare float @foo(float)

define float @none(float %x, float %y) {
entry:
; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
  %vec    = load <3 x float>, <3 x float>* @vec
; CHECK:  %select = load i1, i1* @select
  %select = load i1, i1* @select
; CHECK:  %arr = load [3 x float], [3 x float]* @arr
  %arr    = load [3 x float], [3 x float]* @arr

; CHECK:  %a = fadd float %x, %y
  %a = fadd float %x, %y
; CHECK:  %a_vec = fadd <3 x float> %vec, %vec
  %a_vec = fadd <3 x float> %vec, %vec
; CHECK:  %b = fsub float %x, %y
  %b = fsub float %x, %y
; CHECK:  %b_vec = fsub <3 x float> %vec, %vec
  %b_vec = fsub <3 x float> %vec, %vec
; CHECK:  %c = fmul float %x, %y
  %c = fmul float %x, %y
; CHECK:  %c_vec = fmul <3 x float> %vec, %vec
  %c_vec = fmul <3 x float> %vec, %vec
; CHECK:  %d = fdiv float %x, %y
  %d = fdiv float %x, %y
; CHECK:  %d_vec = fdiv <3 x float> %vec, %vec
  %d_vec = fdiv <3 x float> %vec, %vec
; CHECK:  %e = frem float %x, %y
  %e = frem float %x, %y
; CHECK:  %e_vec = frem <3 x float> %vec, %vec
  %e_vec = frem <3 x float> %vec, %vec
; CHECK:  %f = fneg float %x
  %f = fneg float %x
; CHECK:  %f_vec = fneg <3 x float> %vec
  %f_vec = fneg <3 x float> %vec
; CHECK:  ret float %f
  ret  float %f
}

; CHECK: no_nan
define float @no_nan(float %x, float %y) {
entry:
; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
  %vec    = load <3 x float>, <3 x float>* @vec
; CHECK:  %select = load i1, i1* @select
  %select = load i1, i1* @select
; CHECK:  %arr = load [3 x float], [3 x float]* @arr
  %arr    = load [3 x float], [3 x float]* @arr

; CHECK:  %a = fadd nnan float %x, %y
  %a = fadd nnan float %x, %y
; CHECK:  %a_vec = fadd nnan <3 x float> %vec, %vec
  %a_vec = fadd nnan <3 x float> %vec, %vec
; CHECK:  %b = fsub nnan float %x, %y
  %b = fsub nnan float %x, %y
; CHECK:  %b_vec = fsub nnan <3 x float> %vec, %vec
  %b_vec = fsub nnan <3 x float> %vec, %vec
; CHECK:  %c = fmul nnan float %x, %y
  %c = fmul nnan float %x, %y
; CHECK:  %c_vec = fmul nnan <3 x float> %vec, %vec
  %c_vec = fmul nnan <3 x float> %vec, %vec
; CHECK:  %d = fdiv nnan float %x, %y
  %d = fdiv nnan float %x, %y
; CHECK:  %d_vec = fdiv nnan <3 x float> %vec, %vec
  %d_vec = fdiv nnan <3 x float> %vec, %vec
; CHECK:  %e = frem nnan float %x, %y
  %e = frem nnan float %x, %y
; CHECK:  %e_vec = frem nnan <3 x float> %vec, %vec
  %e_vec = frem nnan <3 x float> %vec, %vec
; CHECK:  %f = fneg nnan float %x
  %f = fneg nnan float %x
; CHECK:  %f_vec = fneg nnan <3 x float> %vec
  %f_vec = fneg nnan <3 x float> %vec
; CHECK:  ret float %f
  ret float %f
}

; CHECK: @contract(
define float @contract(float %x, float %y) {
entry:
; CHECK: %a = fsub contract float %x, %y
  %a = fsub contract float %x, %y
; CHECK: %b = fadd contract float %x, %y
  %b = fadd contract float %x, %y
; CHECK: %c = fmul contract float %a, %b
  %c = fmul contract float %a, %b
  ret float %c
}

; CHECK: @reassoc(
define float @reassoc(float %x, float %y) {
; CHECK: %a = fsub reassoc float %x, %y
  %a = fsub reassoc float %x, %y
; CHECK: %b = fmul reassoc float %x, %y
  %b = fmul reassoc float %x, %y
; CHECK: %c = call reassoc float @foo(float %b)
  %c = call reassoc float @foo(float %b)
  ret float %c
}

; CHECK: @afn(
define float @afn(float %x, float %y) {
; CHECK: %a = fdiv afn float %x, %y
  %a = fdiv afn float %x, %y
; CHECK: %b = frem afn float %x, %y
  %b = frem afn float %x, %y
; CHECK: %c = call afn float @foo(float %b)
  %c = call afn float @foo(float %b)
  ret float %c
}

; CHECK: no_nan_inf
define float @no_nan_inf(float %x, float %y) {
entry:
; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
  %vec    = load <3 x float>, <3 x float>* @vec
; CHECK:  %select = load i1, i1* @select
  %select = load i1, i1* @select
; CHECK:  %arr = load [3 x float], [3 x float]* @arr
  %arr    = load [3 x float], [3 x float]* @arr

; CHECK:  %a = fadd nnan ninf float %x, %y
  %a = fadd ninf nnan float %x, %y
; CHECK:  %a_vec = fadd nnan <3 x float> %vec, %vec
  %a_vec = fadd nnan <3 x float> %vec, %vec
; CHECK:  %b = fsub nnan float %x, %y
  %b = fsub nnan float %x, %y
; CHECK:  %b_vec = fsub nnan ninf <3 x float> %vec, %vec
  %b_vec = fsub ninf nnan <3 x float> %vec, %vec
; CHECK:  %c = fmul nnan float %x, %y
  %c = fmul nnan float %x, %y
; CHECK:  %c_vec = fmul nnan <3 x float> %vec, %vec
  %c_vec = fmul nnan <3 x float> %vec, %vec
; CHECK:  %d = fdiv nnan ninf float %x, %y
  %d = fdiv ninf nnan float %x, %y
; CHECK:  %d_vec = fdiv nnan <3 x float> %vec, %vec
  %d_vec = fdiv nnan <3 x float> %vec, %vec
; CHECK:  %e = frem nnan float %x, %y
  %e = frem nnan float %x, %y
; CHECK:  %e_vec = frem nnan ninf <3 x float> %vec, %vec
  %e_vec = frem ninf nnan <3 x float> %vec, %vec
; CHECK:  ret float %e
  ret float %e
}

; CHECK: mixed_flags
define float @mixed_flags(float %x, float %y) {
entry:
; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
  %vec    = load <3 x float>, <3 x float>* @vec
; CHECK:  %select = load i1, i1* @select
  %select = load i1, i1* @select
; CHECK:  %arr = load [3 x float], [3 x float]* @arr
  %arr    = load [3 x float], [3 x float]* @arr

; CHECK:  %a = fadd nnan ninf afn float %x, %y
  %a = fadd ninf nnan afn float %x, %y
; CHECK:  %a_vec = fadd reassoc nnan <3 x float> %vec, %vec
  %a_vec = fadd reassoc nnan <3 x float> %vec, %vec
; CHECK:  %b = fsub fast float %x, %y
  %b = fsub nnan nsz fast float %x, %y
; CHECK:  %b_vec = fsub nnan <3 x float> %vec, %vec
  %b_vec = fsub nnan <3 x float> %vec, %vec
; CHECK:  %c = fmul fast float %x, %y
  %c = fmul nsz fast arcp float %x, %y
; CHECK:  %c_vec = fmul nsz <3 x float> %vec, %vec
  %c_vec = fmul nsz <3 x float> %vec, %vec
; CHECK:  %d = fdiv nnan ninf arcp float %x, %y
  %d = fdiv arcp ninf nnan float %x, %y
; CHECK:  %d_vec = fdiv fast <3 x float> %vec, %vec
  %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
; CHECK:  %e = frem nnan nsz float %x, %y
  %e = frem nnan nsz float %x, %y
; CHECK:  %e_vec = frem nnan <3 x float> %vec, %vec
  %e_vec = frem nnan <3 x float> %vec, %vec
; CHECK:  %f = fneg nnan nsz float %x
  %f = fneg nnan nsz float %x
; CHECK:  %f_vec = fneg fast <3 x float> %vec
  %f_vec = fneg fast <3 x float> %vec
; CHECK:  ret float %f
  ret float %f
}