1a54704deSHeejin Ahn; RUN: llc -mcpu=mvp < %s | FileCheck %s 2a54704deSHeejin Ahn; RUN: llc -mcpu=mvp -mattr=+simd128 < %s | FileCheck %s --check-prefixes SIMD128 31822e318SHeejin Ahn 41822e318SHeejin Ahn; Test that codegen emits target features from the command line or 51822e318SHeejin Ahn; function attributes correctly and that features are enabled for the 61822e318SHeejin Ahn; entire module if they are enabled for any function in the module. 71822e318SHeejin Ahn 81822e318SHeejin Ahntarget triple = "wasm32-unknown-unknown" 91822e318SHeejin Ahn 101822e318SHeejin Ahndefine void @fn_atomics(ptr %p1, float %f2) #0 { 111822e318SHeejin Ahn %a = atomicrmw min ptr undef, i32 42 seq_cst 121822e318SHeejin Ahn %v = fptoui float %f2 to i32 131822e318SHeejin Ahn store i32 %v, ptr %p1 141822e318SHeejin Ahn ret void 151822e318SHeejin Ahn} 161822e318SHeejin Ahn 171822e318SHeejin Ahndefine void @fn_nontrapping_fptoint(ptr %p1, float %f2) #1 { 181822e318SHeejin Ahn %a = atomicrmw min ptr undef, i32 42 seq_cst 191822e318SHeejin Ahn %v = fptoui float %f2 to i32 201822e318SHeejin Ahn store i32 %v, ptr %p1 211822e318SHeejin Ahn ret void 221822e318SHeejin Ahn} 231822e318SHeejin Ahn 241822e318SHeejin Ahndefine void @fn_reference_types() #2 { 251822e318SHeejin Ahn ret void 261822e318SHeejin Ahn} 271822e318SHeejin Ahn 281822e318SHeejin Ahnattributes #0 = { "target-features"="+atomics" } 291822e318SHeejin Ahnattributes #1 = { "target-features"="+nontrapping-fptoint" } 301822e318SHeejin Ahnattributes #2 = { "target-features"="+reference-types" } 311822e318SHeejin Ahn 321822e318SHeejin Ahn; CHECK-LABEL: fn_atomics: 331822e318SHeejin Ahn 341822e318SHeejin Ahn; Expanded atomicrmw min 35a54704deSHeejin Ahn; CHECK: loop 361822e318SHeejin Ahn; CHECK: i32.atomic.rmw.cmpxchg 37a54704deSHeejin Ahn; CHECK: end_loop 381822e318SHeejin Ahn 391822e318SHeejin Ahn; nontrapping fptoint 401822e318SHeejin Ahn; CHECK: i32.trunc_sat_f32_u 41a54704deSHeejin Ahn; CHECK: i32.store 421822e318SHeejin Ahn 431822e318SHeejin Ahn; `fn_nontrapping_fptoint` should be the same as `fn_atomics` 441822e318SHeejin Ahn; CHECK-LABEL: fn_nontrapping_fptoint: 451822e318SHeejin Ahn 461822e318SHeejin Ahn; Expanded atomicrmw min 47a54704deSHeejin Ahn; CHECK: loop 481822e318SHeejin Ahn; CHECK: i32.atomic.rmw.cmpxchg 49a54704deSHeejin Ahn; CHECK: end_loop 501822e318SHeejin Ahn 511822e318SHeejin Ahn; nontrapping fptoint 521822e318SHeejin Ahn; CHECK: i32.trunc_sat_f32_u 53a54704deSHeejin Ahn; CHECK: i32.store 541822e318SHeejin Ahn 55a54704deSHeejin Ahn; Features in function attributes: 56a54704deSHeejin Ahn; +atomics, +nontrapping-fptoint, +reference-types 571822e318SHeejin Ahn; CHECK-LABEL: .custom_section.target_features,"",@ 58*c3536b26SDan Gohman; CHECK-NEXT: .int8 4 59a54704deSHeejin Ahn; CHECK-NEXT: .int8 43 60a54704deSHeejin Ahn; CHECK-NEXT: .int8 7 61a54704deSHeejin Ahn; CHECK-NEXT: .ascii "atomics" 62a54704deSHeejin Ahn; CHECK-NEXT: .int8 43 63*c3536b26SDan Gohman; CHECK-NEXT: .int8 22 64*c3536b26SDan Gohman; CHECK-NEXT: .ascii "call-indirect-overlong" 65*c3536b26SDan Gohman; CHECK-NEXT: .int8 43 66a54704deSHeejin Ahn; CHECK-NEXT: .int8 19 67a54704deSHeejin Ahn; CHECK-NEXT: .ascii "nontrapping-fptoint" 68a54704deSHeejin Ahn; CHECK-NEXT: .int8 43 69a54704deSHeejin Ahn; CHECK-NEXT: .int8 15 70a54704deSHeejin Ahn; CHECK-NEXT: .ascii "reference-types" 711822e318SHeejin Ahn 72a54704deSHeejin Ahn; Features in function attributes + features specified by -mattr= option: 731822e318SHeejin Ahn; +atomics, +nontrapping-fptoint, +reference-types, +simd128 74a54704deSHeejin Ahn; SIMD128-LABEL: .custom_section.target_features,"",@ 75*c3536b26SDan Gohman; SIMD128-NEXT: .int8 5 761822e318SHeejin Ahn; SIMD128-NEXT: .int8 43 771822e318SHeejin Ahn; SIMD128-NEXT: .int8 7 781822e318SHeejin Ahn; SIMD128-NEXT: .ascii "atomics" 791822e318SHeejin Ahn; SIMD128-NEXT: .int8 43 80*c3536b26SDan Gohman; SIMD128-NEXT: .int8 22 81*c3536b26SDan Gohman; SIMD128-NEXT: .ascii "call-indirect-overlong" 82*c3536b26SDan Gohman; SIMD128-NEXT: .int8 43 831822e318SHeejin Ahn; SIMD128-NEXT: .int8 19 841822e318SHeejin Ahn; SIMD128-NEXT: .ascii "nontrapping-fptoint" 851822e318SHeejin Ahn; SIMD128-NEXT: .int8 43 861822e318SHeejin Ahn; SIMD128-NEXT: .int8 15 871822e318SHeejin Ahn; SIMD128-NEXT: .ascii "reference-types" 881822e318SHeejin Ahn; SIMD128-NEXT: .int8 43 891822e318SHeejin Ahn; SIMD128-NEXT: .int8 7 901822e318SHeejin Ahn; SIMD128-NEXT: .ascii "simd128" 91