1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test that basic immediates assemble as expected. 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 6*9880d681SAndroid Build Coastguard Workertarget triple = "wasm32-unknown-unknown" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: zero_i32: 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push[[NUM:[0-9]+]]=, 0{{$}} 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 12*9880d681SAndroid Build Coastguard Workerdefine i32 @zero_i32() { 13*9880d681SAndroid Build Coastguard Worker ret i32 0 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: one_i32: 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push[[NUM:[0-9]+]]=, 1{{$}} 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 20*9880d681SAndroid Build Coastguard Workerdefine i32 @one_i32() { 21*9880d681SAndroid Build Coastguard Worker ret i32 1 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: max_i32: 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push[[NUM:[0-9]+]]=, 2147483647{{$}} 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 28*9880d681SAndroid Build Coastguard Workerdefine i32 @max_i32() { 29*9880d681SAndroid Build Coastguard Worker ret i32 2147483647 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: min_i32: 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push[[NUM:[0-9]+]]=, -2147483648{{$}} 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 36*9880d681SAndroid Build Coastguard Workerdefine i32 @min_i32() { 37*9880d681SAndroid Build Coastguard Worker ret i32 -2147483648 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: zero_i64: 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}} 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.const $push[[NUM:[0-9]+]]=, 0{{$}} 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 44*9880d681SAndroid Build Coastguard Workerdefine i64 @zero_i64() { 45*9880d681SAndroid Build Coastguard Worker ret i64 0 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: one_i64: 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}} 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.const $push[[NUM:[0-9]+]]=, 1{{$}} 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 52*9880d681SAndroid Build Coastguard Workerdefine i64 @one_i64() { 53*9880d681SAndroid Build Coastguard Worker ret i64 1 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: max_i64: 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}} 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.const $push[[NUM:[0-9]+]]=, 9223372036854775807{{$}} 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 60*9880d681SAndroid Build Coastguard Workerdefine i64 @max_i64() { 61*9880d681SAndroid Build Coastguard Worker ret i64 9223372036854775807 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: min_i64: 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}} 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.const $push[[NUM:[0-9]+]]=, -9223372036854775808{{$}} 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 68*9880d681SAndroid Build Coastguard Workerdefine i64 @min_i64() { 69*9880d681SAndroid Build Coastguard Worker ret i64 -9223372036854775808 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: negzero_f32: 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, -0x0p0{{$}} 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 76*9880d681SAndroid Build Coastguard Workerdefine float @negzero_f32() { 77*9880d681SAndroid Build Coastguard Worker ret float -0.0 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: zero_f32: 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, 0x0p0{{$}} 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 84*9880d681SAndroid Build Coastguard Workerdefine float @zero_f32() { 85*9880d681SAndroid Build Coastguard Worker ret float 0.0 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: one_f32: 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, 0x1p0{{$}} 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 92*9880d681SAndroid Build Coastguard Workerdefine float @one_f32() { 93*9880d681SAndroid Build Coastguard Worker ret float 1.0 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: two_f32: 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, 0x1p1{{$}} 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 100*9880d681SAndroid Build Coastguard Workerdefine float @two_f32() { 101*9880d681SAndroid Build Coastguard Worker ret float 2.0 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nan_f32: 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, nan{{$}} 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 108*9880d681SAndroid Build Coastguard Workerdefine float @nan_f32() { 109*9880d681SAndroid Build Coastguard Worker ret float 0x7FF8000000000000 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: negnan_f32: 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, -nan{{$}} 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 116*9880d681SAndroid Build Coastguard Workerdefine float @negnan_f32() { 117*9880d681SAndroid Build Coastguard Worker ret float 0xFFF8000000000000 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: inf_f32: 121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, infinity{{$}} 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 124*9880d681SAndroid Build Coastguard Workerdefine float @inf_f32() { 125*9880d681SAndroid Build Coastguard Worker ret float 0x7FF0000000000000 126*9880d681SAndroid Build Coastguard Worker} 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: neginf_f32: 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, -infinity{{$}} 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 132*9880d681SAndroid Build Coastguard Workerdefine float @neginf_f32() { 133*9880d681SAndroid Build Coastguard Worker ret float 0xFFF0000000000000 134*9880d681SAndroid Build Coastguard Worker} 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: custom_nan_f32: 137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, -nan:0x6bcdef{{$}} 139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 140*9880d681SAndroid Build Coastguard Workerdefine float @custom_nan_f32() { 141*9880d681SAndroid Build Coastguard Worker ret float 0xFFFD79BDE0000000 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker; TODO: LLVM's MC layer stores f32 operands as host doubles, requiring a 145*9880d681SAndroid Build Coastguard Worker; conversion, so the bits of the NaN are not fully preserved. 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: custom_nans_f32: 148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f32{{$}} 149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f32.const $push[[NUM:[0-9]+]]=, -nan:0x6bcdef{{$}} 150*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 151*9880d681SAndroid Build Coastguard Workerdefine float @custom_nans_f32() { 152*9880d681SAndroid Build Coastguard Worker ret float 0xFFF579BDE0000000 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: negzero_f64: 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, -0x0p0{{$}} 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 159*9880d681SAndroid Build Coastguard Workerdefine double @negzero_f64() { 160*9880d681SAndroid Build Coastguard Worker ret double -0.0 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: zero_f64: 164*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, 0x0p0{{$}} 166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 167*9880d681SAndroid Build Coastguard Workerdefine double @zero_f64() { 168*9880d681SAndroid Build Coastguard Worker ret double 0.0 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: one_f64: 172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, 0x1p0{{$}} 174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 175*9880d681SAndroid Build Coastguard Workerdefine double @one_f64() { 176*9880d681SAndroid Build Coastguard Worker ret double 1.0 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: two_f64: 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, 0x1p1{{$}} 182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 183*9880d681SAndroid Build Coastguard Workerdefine double @two_f64() { 184*9880d681SAndroid Build Coastguard Worker ret double 2.0 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nan_f64: 188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, nan{{$}} 190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 191*9880d681SAndroid Build Coastguard Workerdefine double @nan_f64() { 192*9880d681SAndroid Build Coastguard Worker ret double 0x7FF8000000000000 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: negnan_f64: 196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, -nan{{$}} 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 199*9880d681SAndroid Build Coastguard Workerdefine double @negnan_f64() { 200*9880d681SAndroid Build Coastguard Worker ret double 0xFFF8000000000000 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: inf_f64: 204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 205*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, infinity{{$}} 206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 207*9880d681SAndroid Build Coastguard Workerdefine double @inf_f64() { 208*9880d681SAndroid Build Coastguard Worker ret double 0x7FF0000000000000 209*9880d681SAndroid Build Coastguard Worker} 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: neginf_f64: 212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, -infinity{{$}} 214*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 215*9880d681SAndroid Build Coastguard Workerdefine double @neginf_f64() { 216*9880d681SAndroid Build Coastguard Worker ret double 0xFFF0000000000000 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: custom_nan_f64: 220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, -nan:0xabcdef0123456{{$}} 222*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 223*9880d681SAndroid Build Coastguard Workerdefine double @custom_nan_f64() { 224*9880d681SAndroid Build Coastguard Worker ret double 0xFFFABCDEF0123456 225*9880d681SAndroid Build Coastguard Worker} 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: custom_nans_f64: 228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result f64{{$}} 229*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: f64.const $push[[NUM:[0-9]+]]=, -nan:0x2bcdef0123456{{$}} 230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}} 231*9880d681SAndroid Build Coastguard Workerdefine double @custom_nans_f64() { 232*9880d681SAndroid Build Coastguard Worker ret double 0xFFF2BCDEF0123456 233*9880d681SAndroid Build Coastguard Worker} 234