@@ -142,6 +142,64 @@ class IRBuilderSpec : XCTestCase {
142
142
// IRBUILDERCMP-NEXT: }
143
143
module. dump ( )
144
144
} )
145
+
146
+ // MARK: Float comparisons
147
+ XCTAssert ( fileCheckOutput ( of: . stderr, withPrefixes: [ " IRBUILDERFCMP " ] ) {
148
+ // IRBUILDERFCMP: ; ModuleID = 'IRBuilderTest'
149
+ // IRBUILDERFCMP-NEXT: source_filename = "IRBuilderTest"
150
+ let module = Module ( name: " IRBuilderTest " )
151
+ let builder = IRBuilder ( module: module)
152
+
153
+ // IRBUILDERFCMP: @a = global double 1
154
+ // IRBUILDERFCMP-NEXT: @b = global double 1
155
+ var g1 = builder. addGlobal ( " a " , type: FloatType . double)
156
+ g1. initializer = FloatType . double. constant ( 1 )
157
+ var g2 = builder. addGlobal ( " b " , type: FloatType . double)
158
+ g2. initializer = FloatType . double. constant ( 1 )
159
+
160
+ // IRBUILDERFCMP: define void @main() {
161
+ let main = builder. addFunction ( " main " ,
162
+ type: FunctionType ( argTypes: [ ] ,
163
+ returnType: VoidType ( ) ) )
164
+ // IRBUILDERFCMP-NEXT: entry:
165
+ let entry = main. appendBasicBlock ( named: " entry " )
166
+ builder. positionAtEnd ( of: entry)
167
+
168
+ // IRBUILDERFCMP-NEXT: %0 = load double, double* @a
169
+ let vg1 = builder. buildLoad ( g1)
170
+ // IRBUILDERFCMP-NEXT: %1 = load double, double* @b
171
+ let vg2 = builder. buildLoad ( g2)
172
+
173
+ // IRBUILDERFCMP-NEXT: %2 = fcmp oeq double %0, %1
174
+ _ = builder. buildFCmp ( vg1, vg2, . oeq)
175
+ // IRBUILDERFCMP-NEXT: %3 = fcmp one double %0, %1
176
+ _ = builder. buildFCmp ( vg1, vg2, . one)
177
+ // IRBUILDERFCMP-NEXT: %4 = fcmp ugt double %0, %1
178
+ _ = builder. buildFCmp ( vg1, vg2, . ugt)
179
+ // IRBUILDERFCMP-NEXT: %5 = fcmp uge double %0, %1
180
+ _ = builder. buildFCmp ( vg1, vg2, . uge)
181
+ // IRBUILDERFCMP-NEXT: %6 = fcmp ult double %0, %1
182
+ _ = builder. buildFCmp ( vg1, vg2, . ult)
183
+ // IRBUILDERFCMP-NEXT: %7 = fcmp ule double %0, %1
184
+ _ = builder. buildFCmp ( vg1, vg2, . ule)
185
+ // IRBUILDERFCMP-NEXT: %8 = fcmp ogt double %0, %1
186
+ _ = builder. buildFCmp ( vg1, vg2, . ogt)
187
+ // IRBUILDERFCMP-NEXT: %9 = fcmp oge double %0, %1
188
+ _ = builder. buildFCmp ( vg1, vg2, . oge)
189
+ // IRBUILDERFCMP-NEXT: %10 = fcmp olt double %0, %1
190
+ _ = builder. buildFCmp ( vg1, vg2, . olt)
191
+ // IRBUILDERFCMP-NEXT: %11 = fcmp ole double %0, %1
192
+ _ = builder. buildFCmp ( vg1, vg2, . ole)
193
+ // IRBUILDERFCMP-NEXT: %12 = fcmp true double %0, %1
194
+ _ = builder. buildFCmp ( vg1, vg2, . true )
195
+ // IRBUILDERFCMP-NEXT: %13 = fcmp false double %0, %1
196
+ _ = builder. buildFCmp ( vg1, vg2, . false )
197
+
198
+ // IRBUILDERFCMP-NEXT: ret void
199
+ builder. buildRetVoid ( )
200
+ // IRBUILDERFCMP-NEXT: }
201
+ module. dump ( )
202
+ } )
145
203
}
146
204
147
205
#if !os(macOS)
0 commit comments