@@ -142,6 +142,64 @@ class IRBuilderSpec : XCTestCase {
142142 // IRBUILDERCMP-NEXT: }
143143 module. dump ( )
144144 } )
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+ } )
145203 }
146204
147205 #if !os(macOS)
0 commit comments