Files
clang-p2996/llvm/test/Transforms/Inline/WebAssembly/inline-target-features.ll
Thomas Lively d53d952810 [WebAssembly] Allow inlining functions with different features
Allow inlining only when the Callee has a subset of the Caller's
features. In principle, we should be able to inline regardless of any
features because WebAssembly supports features at module granularity,
not function granularity, but without this restriction it would be
possible for a module to "forget" about features if all the functions
that used them were inlined.

Requested in PR46812.

Differential Revision: https://reviews.llvm.org/D85494
2020-08-13 13:57:43 -07:00

42 lines
1.1 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -mtriple=wasm32-unknown-unknown -S -inline | FileCheck %s
; Check that having functions can be inlined into callers only when
; they have a subset of the caller's features.
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"
declare void @foo()
define internal void @uses_simd() #0 {
; CHECK-LABEL: @uses_simd(
; CHECK-NEXT: tail call void @foo()
; CHECK-NEXT: ret void
;
tail call void @foo()
ret void
}
define void @many_features() #1 {
; CHECK-LABEL: @many_features(
; CHECK-NEXT: tail call void @foo()
; CHECK-NEXT: ret void
;
tail call fastcc void @uses_simd()
ret void
}
define void @few_features() #2 {
; CHECK-LABEL: @few_features(
; CHECK-NEXT: tail call fastcc void @uses_simd()
; CHECK-NEXT: ret void
;
tail call fastcc void @uses_simd()
ret void
}
attributes #0 = { "target-cpu"="mvp" "target-features"="+simd128"}
attributes #1 = { "target-cpu"="bleeding-edge" "target-features"="+simd128" }
attributes #2 = { "target-cpu"="mvp" "target-features"="+multivalue" }