Since the IROutliner is performing an optimization, it should not outline from functions explicitly marked with optnone. This adds an extra check and test to make sure this does not occur. Reviewers: paquette Differential Revision: https://reviews.llvm.org/D121567
62 lines
2.0 KiB
LLVM
62 lines
2.0 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
|
|
; RUN: opt -S -verify -iroutliner -ir-outlining-no-cost < %s | FileCheck %s
|
|
|
|
; Ensure that a function is not outlined if a function has the optnone
|
|
; attribute.
|
|
|
|
define void @outline_constants1() optnone noinline {
|
|
entry:
|
|
%a = alloca i32, align 4
|
|
%b = alloca i32, align 4
|
|
%c = alloca i32, align 4
|
|
store i32 3, i32* %a, align 4
|
|
store i32 4, i32* %b, align 4
|
|
store i32 5, i32* %c, align 4
|
|
%al = load i32, i32* %a
|
|
%bl = load i32, i32* %b
|
|
%cl = load i32, i32* %c
|
|
ret void
|
|
}
|
|
|
|
define void @outline_constants2() optnone noinline {
|
|
entry:
|
|
%a = alloca i32, align 4
|
|
%b = alloca i32, align 4
|
|
%c = alloca i32, align 4
|
|
store i32 2, i32* %a, align 4
|
|
store i32 3, i32* %b, align 4
|
|
store i32 4, i32* %c, align 4
|
|
%al = load i32, i32* %a
|
|
%bl = load i32, i32* %b
|
|
%cl = load i32, i32* %c
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: @outline_constants1(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
|
|
; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4
|
|
; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4
|
|
; CHECK-NEXT: store i32 3, i32* [[A]], align 4
|
|
; CHECK-NEXT: store i32 4, i32* [[B]], align 4
|
|
; CHECK-NEXT: store i32 5, i32* [[C]], align 4
|
|
; CHECK-NEXT: [[AL:%.*]] = load i32, i32* [[A]], align 4
|
|
; CHECK-NEXT: [[BL:%.*]] = load i32, i32* [[B]], align 4
|
|
; CHECK-NEXT: [[CL:%.*]] = load i32, i32* [[C]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
;
|
|
; CHECK-LABEL: @outline_constants2(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
|
|
; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4
|
|
; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4
|
|
; CHECK-NEXT: store i32 2, i32* [[A]], align 4
|
|
; CHECK-NEXT: store i32 3, i32* [[B]], align 4
|
|
; CHECK-NEXT: store i32 4, i32* [[C]], align 4
|
|
; CHECK-NEXT: [[AL:%.*]] = load i32, i32* [[A]], align 4
|
|
; CHECK-NEXT: [[BL:%.*]] = load i32, i32* [[B]], align 4
|
|
; CHECK-NEXT: [[CL:%.*]] = load i32, i32* [[C]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|