blob: 504424b9d65daa9bf9704ee2bd8567034213a7e0 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-keep-registers | FileCheck %s
; These intrinsics are currently expanded, because wasi-libc does not have the specific libcalls.
target triple = "wasm32-unknown-wasi"
define fp128 @minimum_f128(fp128 %x, fp128 %y) {
; CHECK-LABEL: minimum_f128:
; CHECK: .functype minimum_f128 (i32, i64, i64, i64, i64) -> ()
; CHECK-NEXT: .local i32, i32, i32, i32
; CHECK-NEXT: # %bb.0:
; CHECK-NEXT: local.get $push22=, 1
; CHECK-NEXT: local.get $push21=, 2
; CHECK-NEXT: local.get $push20=, 3
; CHECK-NEXT: local.get $push19=, 4
; CHECK-NEXT: call $push18=, __unordtf2, $pop22, $pop21, $pop20, $pop19
; CHECK-NEXT: local.set 5, $pop18
; CHECK-NEXT: local.get $push27=, 1
; CHECK-NEXT: local.get $push26=, 2
; CHECK-NEXT: local.get $push25=, 3
; CHECK-NEXT: local.get $push24=, 4
; CHECK-NEXT: call $push23=, __lttf2, $pop27, $pop26, $pop25, $pop24
; CHECK-NEXT: local.set 6, $pop23
; CHECK-NEXT: local.get $push32=, 1
; CHECK-NEXT: local.get $push31=, 2
; CHECK-NEXT: local.get $push30=, 3
; CHECK-NEXT: local.get $push29=, 4
; CHECK-NEXT: call $push28=, __eqtf2, $pop32, $pop31, $pop30, $pop29
; CHECK-NEXT: local.set 7, $pop28
; CHECK-NEXT: local.get $push42=, 0
; CHECK-NEXT: i64.const $push2=, 9223231299366420480
; CHECK-NEXT: local.get $push35=, 2
; CHECK-NEXT: local.get $push34=, 4
; CHECK-NEXT: local.get $push33=, 6
; CHECK-NEXT: i32.const $push0=, 0
; CHECK-NEXT: i32.lt_s $push17=, $pop33, $pop0
; CHECK-NEXT: local.tee $push16=, 6, $pop17
; CHECK-NEXT: i64.select $push1=, $pop35, $pop34, $pop16
; CHECK-NEXT: local.get $push36=, 5
; CHECK-NEXT: i64.select $push3=, $pop2, $pop1, $pop36
; CHECK-NEXT: local.get $push40=, 2
; CHECK-NEXT: local.get $push39=, 4
; CHECK-NEXT: local.get $push38=, 1
; CHECK-NEXT: local.get $push37=, 2
; CHECK-NEXT: call $push4=, __trunctfsf2, $pop38, $pop37
; CHECK-NEXT: i32.reinterpret_f32 $push5=, $pop4
; CHECK-NEXT: i32.const $push6=, -2147483648
; CHECK-NEXT: i32.eq $push15=, $pop5, $pop6
; CHECK-NEXT: local.tee $push14=, 8, $pop15
; CHECK-NEXT: i64.select $push7=, $pop40, $pop39, $pop14
; CHECK-NEXT: local.get $push41=, 7
; CHECK-NEXT: i64.select $push8=, $pop3, $pop7, $pop41
; CHECK-NEXT: i64.store 8($pop42), $pop8
; CHECK-NEXT: local.get $push51=, 0
; CHECK-NEXT: i64.const $push10=, 0
; CHECK-NEXT: local.get $push45=, 1
; CHECK-NEXT: local.get $push44=, 3
; CHECK-NEXT: local.get $push43=, 6
; CHECK-NEXT: i64.select $push9=, $pop45, $pop44, $pop43
; CHECK-NEXT: local.get $push46=, 5
; CHECK-NEXT: i64.select $push11=, $pop10, $pop9, $pop46
; CHECK-NEXT: local.get $push49=, 1
; CHECK-NEXT: local.get $push48=, 3
; CHECK-NEXT: local.get $push47=, 8
; CHECK-NEXT: i64.select $push12=, $pop49, $pop48, $pop47
; CHECK-NEXT: local.get $push50=, 7
; CHECK-NEXT: i64.select $push13=, $pop11, $pop12, $pop50
; CHECK-NEXT: i64.store 0($pop51), $pop13
; CHECK-NEXT: return
%r = call fp128 @llvm.minimum.f128(fp128 %x, fp128 %y)
ret fp128 %r
}
define fp128 @maximum_f128(fp128 %x, fp128 %y) {
; CHECK-LABEL: maximum_f128:
; CHECK: .functype maximum_f128 (i32, i64, i64, i64, i64) -> ()
; CHECK-NEXT: .local i32, i32, i32, i32
; CHECK-NEXT: # %bb.0:
; CHECK-NEXT: local.get $push20=, 1
; CHECK-NEXT: local.get $push19=, 2
; CHECK-NEXT: local.get $push18=, 3
; CHECK-NEXT: local.get $push17=, 4
; CHECK-NEXT: call $push16=, __unordtf2, $pop20, $pop19, $pop18, $pop17
; CHECK-NEXT: local.set 5, $pop16
; CHECK-NEXT: local.get $push25=, 1
; CHECK-NEXT: local.get $push24=, 2
; CHECK-NEXT: local.get $push23=, 3
; CHECK-NEXT: local.get $push22=, 4
; CHECK-NEXT: call $push21=, __gttf2, $pop25, $pop24, $pop23, $pop22
; CHECK-NEXT: local.set 6, $pop21
; CHECK-NEXT: local.get $push30=, 1
; CHECK-NEXT: local.get $push29=, 2
; CHECK-NEXT: local.get $push28=, 3
; CHECK-NEXT: local.get $push27=, 4
; CHECK-NEXT: call $push26=, __eqtf2, $pop30, $pop29, $pop28, $pop27
; CHECK-NEXT: local.set 7, $pop26
; CHECK-NEXT: local.get $push40=, 0
; CHECK-NEXT: i64.const $push2=, 9223231299366420480
; CHECK-NEXT: local.get $push33=, 2
; CHECK-NEXT: local.get $push32=, 4
; CHECK-NEXT: local.get $push31=, 6
; CHECK-NEXT: i32.const $push0=, 0
; CHECK-NEXT: i32.gt_s $push15=, $pop31, $pop0
; CHECK-NEXT: local.tee $push14=, 6, $pop15
; CHECK-NEXT: i64.select $push1=, $pop33, $pop32, $pop14
; CHECK-NEXT: local.get $push34=, 5
; CHECK-NEXT: i64.select $push3=, $pop2, $pop1, $pop34
; CHECK-NEXT: local.get $push38=, 4
; CHECK-NEXT: local.get $push37=, 2
; CHECK-NEXT: local.get $push36=, 1
; CHECK-NEXT: local.get $push35=, 2
; CHECK-NEXT: call $push4=, __trunctfsf2, $pop36, $pop35
; CHECK-NEXT: i32.reinterpret_f32 $push13=, $pop4
; CHECK-NEXT: local.tee $push12=, 8, $pop13
; CHECK-NEXT: i64.select $push5=, $pop38, $pop37, $pop12
; CHECK-NEXT: local.get $push39=, 7
; CHECK-NEXT: i64.select $push6=, $pop3, $pop5, $pop39
; CHECK-NEXT: i64.store 8($pop40), $pop6
; CHECK-NEXT: local.get $push49=, 0
; CHECK-NEXT: i64.const $push8=, 0
; CHECK-NEXT: local.get $push43=, 1
; CHECK-NEXT: local.get $push42=, 3
; CHECK-NEXT: local.get $push41=, 6
; CHECK-NEXT: i64.select $push7=, $pop43, $pop42, $pop41
; CHECK-NEXT: local.get $push44=, 5
; CHECK-NEXT: i64.select $push9=, $pop8, $pop7, $pop44
; CHECK-NEXT: local.get $push47=, 3
; CHECK-NEXT: local.get $push46=, 1
; CHECK-NEXT: local.get $push45=, 8
; CHECK-NEXT: i64.select $push10=, $pop47, $pop46, $pop45
; CHECK-NEXT: local.get $push48=, 7
; CHECK-NEXT: i64.select $push11=, $pop9, $pop10, $pop48
; CHECK-NEXT: i64.store 0($pop49), $pop11
; CHECK-NEXT: return
%r = call fp128 @llvm.maximum.f128(fp128 %x, fp128 %y)
ret fp128 %r
}
define fp128 @minimumnum_f128(fp128 %x, fp128 %y) {
; CHECK-LABEL: minimumnum_f128:
; CHECK: .functype minimumnum_f128 (i32, i64, i64, i64, i64) -> ()
; CHECK-NEXT: .local i32, i32, i64
; CHECK-NEXT: # %bb.0:
; CHECK-NEXT: local.get $push34=, 3
; CHECK-NEXT: local.get $push33=, 1
; CHECK-NEXT: local.get $push32=, 1
; CHECK-NEXT: local.get $push31=, 2
; CHECK-NEXT: local.get $push30=, 1
; CHECK-NEXT: local.get $push29=, 2
; CHECK-NEXT: call $push28=, __unordtf2, $pop32, $pop31, $pop30, $pop29
; CHECK-NEXT: local.tee $push27=, 5, $pop28
; CHECK-NEXT: i64.select $push26=, $pop34, $pop33, $pop27
; CHECK-NEXT: local.tee $push25=, 1, $pop26
; CHECK-NEXT: local.get $push40=, 3
; CHECK-NEXT: local.get $push38=, 3
; CHECK-NEXT: local.get $push37=, 4
; CHECK-NEXT: local.get $push36=, 3
; CHECK-NEXT: local.get $push35=, 4
; CHECK-NEXT: call $push24=, __unordtf2, $pop38, $pop37, $pop36, $pop35
; CHECK-NEXT: local.tee $push23=, 6, $pop24
; CHECK-NEXT: i64.select $push39=, $pop25, $pop40, $pop23
; CHECK-NEXT: local.set 7, $pop39
; CHECK-NEXT: local.get $push50=, 1
; CHECK-NEXT: local.get $push49=, 7
; CHECK-NEXT: local.get $push48=, 1
; CHECK-NEXT: local.get $push43=, 4
; CHECK-NEXT: local.get $push42=, 2
; CHECK-NEXT: local.get $push41=, 5
; CHECK-NEXT: i64.select $push22=, $pop43, $pop42, $pop41
; CHECK-NEXT: local.tee $push21=, 3, $pop22
; CHECK-NEXT: local.get $push47=, 7
; CHECK-NEXT: local.get $push46=, 3
; CHECK-NEXT: local.get $push45=, 4
; CHECK-NEXT: local.get $push44=, 6
; CHECK-NEXT: i64.select $push20=, $pop46, $pop45, $pop44
; CHECK-NEXT: local.tee $push19=, 2, $pop20
; CHECK-NEXT: call $push0=, __lttf2, $pop48, $pop21, $pop47, $pop19
; CHECK-NEXT: i32.const $push1=, 0
; CHECK-NEXT: i32.lt_s $push18=, $pop0, $pop1
; CHECK-NEXT: local.tee $push17=, 5, $pop18
; CHECK-NEXT: i64.select $push16=, $pop50, $pop49, $pop17
; CHECK-NEXT: local.tee $push15=, 4, $pop16
; CHECK-NEXT: local.get $push53=, 3
; CHECK-NEXT: local.get $push52=, 2
; CHECK-NEXT: local.get $push51=, 5
; CHECK-NEXT: i64.select $push14=, $pop53, $pop52, $pop51
; CHECK-NEXT: local.tee $push13=, 2, $pop14
; CHECK-NEXT: i64.const $push2=, 0
; CHECK-NEXT: i64.const $push12=, 0
; CHECK-NEXT: call $push54=, __eqtf2, $pop15, $pop13, $pop2, $pop12
; CHECK-NEXT: local.set 5, $pop54
; CHECK-NEXT: local.get $push61=, 0
; CHECK-NEXT: local.get $push60=, 2
; CHECK-NEXT: local.get $push58=, 3
; CHECK-NEXT: local.get $push57=, 2
; CHECK-NEXT: local.get $push56=, 1
; CHECK-NEXT: local.get $push55=, 3
; CHECK-NEXT: call $push3=, __trunctfsf2, $pop56, $pop55
; CHECK-NEXT: i32.reinterpret_f32 $push4=, $pop3
; CHECK-NEXT: i32.const $push5=, -2147483648
; CHECK-NEXT: i32.eq $push11=, $pop4, $pop5
; CHECK-NEXT: local.tee $push10=, 6, $pop11
; CHECK-NEXT: i64.select $push6=, $pop58, $pop57, $pop10
; CHECK-NEXT: local.get $push59=, 5
; CHECK-NEXT: i64.select $push7=, $pop60, $pop6, $pop59
; CHECK-NEXT: i64.store 8($pop61), $pop7
; CHECK-NEXT: local.get $push67=, 0
; CHECK-NEXT: local.get $push66=, 4
; CHECK-NEXT: local.get $push64=, 1
; CHECK-NEXT: local.get $push63=, 4
; CHECK-NEXT: local.get $push62=, 6
; CHECK-NEXT: i64.select $push8=, $pop64, $pop63, $pop62
; CHECK-NEXT: local.get $push65=, 5
; CHECK-NEXT: i64.select $push9=, $pop66, $pop8, $pop65
; CHECK-NEXT: i64.store 0($pop67), $pop9
; CHECK-NEXT: return
%r = call fp128 @llvm.minimumnum.f128(fp128 %x, fp128 %y)
ret fp128 %r
}
define fp128 @maximumnum_f128(fp128 %x, fp128 %y) {
; CHECK-LABEL: maximumnum_f128:
; CHECK: .functype maximumnum_f128 (i32, i64, i64, i64, i64) -> ()
; CHECK-NEXT: .local i32, i32, i64
; CHECK-NEXT: # %bb.0:
; CHECK-NEXT: local.get $push32=, 3
; CHECK-NEXT: local.get $push31=, 1
; CHECK-NEXT: local.get $push30=, 1
; CHECK-NEXT: local.get $push29=, 2
; CHECK-NEXT: local.get $push28=, 1
; CHECK-NEXT: local.get $push27=, 2
; CHECK-NEXT: call $push26=, __unordtf2, $pop30, $pop29, $pop28, $pop27
; CHECK-NEXT: local.tee $push25=, 5, $pop26
; CHECK-NEXT: i64.select $push24=, $pop32, $pop31, $pop25
; CHECK-NEXT: local.tee $push23=, 1, $pop24
; CHECK-NEXT: local.get $push38=, 3
; CHECK-NEXT: local.get $push36=, 3
; CHECK-NEXT: local.get $push35=, 4
; CHECK-NEXT: local.get $push34=, 3
; CHECK-NEXT: local.get $push33=, 4
; CHECK-NEXT: call $push22=, __unordtf2, $pop36, $pop35, $pop34, $pop33
; CHECK-NEXT: local.tee $push21=, 6, $pop22
; CHECK-NEXT: i64.select $push37=, $pop23, $pop38, $pop21
; CHECK-NEXT: local.set 7, $pop37
; CHECK-NEXT: local.get $push48=, 1
; CHECK-NEXT: local.get $push47=, 7
; CHECK-NEXT: local.get $push46=, 1
; CHECK-NEXT: local.get $push41=, 4
; CHECK-NEXT: local.get $push40=, 2
; CHECK-NEXT: local.get $push39=, 5
; CHECK-NEXT: i64.select $push20=, $pop41, $pop40, $pop39
; CHECK-NEXT: local.tee $push19=, 3, $pop20
; CHECK-NEXT: local.get $push45=, 7
; CHECK-NEXT: local.get $push44=, 3
; CHECK-NEXT: local.get $push43=, 4
; CHECK-NEXT: local.get $push42=, 6
; CHECK-NEXT: i64.select $push18=, $pop44, $pop43, $pop42
; CHECK-NEXT: local.tee $push17=, 2, $pop18
; CHECK-NEXT: call $push0=, __gttf2, $pop46, $pop19, $pop45, $pop17
; CHECK-NEXT: i32.const $push1=, 0
; CHECK-NEXT: i32.gt_s $push16=, $pop0, $pop1
; CHECK-NEXT: local.tee $push15=, 5, $pop16
; CHECK-NEXT: i64.select $push14=, $pop48, $pop47, $pop15
; CHECK-NEXT: local.tee $push13=, 4, $pop14
; CHECK-NEXT: local.get $push51=, 3
; CHECK-NEXT: local.get $push50=, 2
; CHECK-NEXT: local.get $push49=, 5
; CHECK-NEXT: i64.select $push12=, $pop51, $pop50, $pop49
; CHECK-NEXT: local.tee $push11=, 2, $pop12
; CHECK-NEXT: i64.const $push2=, 0
; CHECK-NEXT: i64.const $push10=, 0
; CHECK-NEXT: call $push52=, __eqtf2, $pop13, $pop11, $pop2, $pop10
; CHECK-NEXT: local.set 5, $pop52
; CHECK-NEXT: local.get $push59=, 0
; CHECK-NEXT: local.get $push58=, 2
; CHECK-NEXT: local.get $push56=, 2
; CHECK-NEXT: local.get $push55=, 3
; CHECK-NEXT: local.get $push54=, 1
; CHECK-NEXT: local.get $push53=, 3
; CHECK-NEXT: call $push3=, __trunctfsf2, $pop54, $pop53
; CHECK-NEXT: i32.reinterpret_f32 $push9=, $pop3
; CHECK-NEXT: local.tee $push8=, 6, $pop9
; CHECK-NEXT: i64.select $push4=, $pop56, $pop55, $pop8
; CHECK-NEXT: local.get $push57=, 5
; CHECK-NEXT: i64.select $push5=, $pop58, $pop4, $pop57
; CHECK-NEXT: i64.store 8($pop59), $pop5
; CHECK-NEXT: local.get $push65=, 0
; CHECK-NEXT: local.get $push64=, 4
; CHECK-NEXT: local.get $push62=, 4
; CHECK-NEXT: local.get $push61=, 1
; CHECK-NEXT: local.get $push60=, 6
; CHECK-NEXT: i64.select $push6=, $pop62, $pop61, $pop60
; CHECK-NEXT: local.get $push63=, 5
; CHECK-NEXT: i64.select $push7=, $pop64, $pop6, $pop63
; CHECK-NEXT: i64.store 0($pop65), $pop7
; CHECK-NEXT: return
%r = call fp128 @llvm.maximumnum.f128(fp128 %x, fp128 %y)
ret fp128 %r
}