157a46914SAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 29dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost --no-ir-sim-indirect-calls < %s | FileCheck %s 357a46914SAndrew Litteken 4f5f377d1SAndrew Litteken; This test checks that we do not outline indirect calls when it is specified 5f5f377d1SAndrew Litteken; that we should not. 657a46914SAndrew Litteken 7*f4b925eeSMatt Arsenaultdeclare void @f1(ptr, ptr); 8*f4b925eeSMatt Arsenaultdeclare void @f2(ptr, ptr); 957a46914SAndrew Litteken 10*f4b925eeSMatt Arsenaultdefine void @function1(ptr %func) { 1157a46914SAndrew Litteken; CHECK-LABEL: @function1( 1257a46914SAndrew Litteken; CHECK-NEXT: entry: 1357a46914SAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 1457a46914SAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 1557a46914SAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4 16*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_1(ptr [[A]], ptr [[B]], ptr [[C]]) 1757a46914SAndrew Litteken; CHECK-NEXT: call void [[FUNC:%.*]]() 18*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]]) 1957a46914SAndrew Litteken; CHECK-NEXT: ret void 2057a46914SAndrew Litteken; 2157a46914SAndrew Littekenentry: 2257a46914SAndrew Litteken %a = alloca i32, align 4 2357a46914SAndrew Litteken %b = alloca i32, align 4 2457a46914SAndrew Litteken %c = alloca i32, align 4 25*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 26*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 27*f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4 2857a46914SAndrew Litteken call void %func() 29*f4b925eeSMatt Arsenault %al = load i32, ptr %a 30*f4b925eeSMatt Arsenault %bl = load i32, ptr %b 31*f4b925eeSMatt Arsenault %cl = load i32, ptr %c 3257a46914SAndrew Litteken ret void 3357a46914SAndrew Litteken} 3457a46914SAndrew Litteken 35*f4b925eeSMatt Arsenaultdefine void @function2(ptr %func) { 3657a46914SAndrew Litteken; CHECK-LABEL: @function2( 3757a46914SAndrew Litteken; CHECK-NEXT: entry: 3857a46914SAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 3957a46914SAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 4057a46914SAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4 41*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_1(ptr [[A]], ptr [[B]], ptr [[C]]) 4257a46914SAndrew Litteken; CHECK-NEXT: call void [[FUNC:%.*]]() 43*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]]) 4457a46914SAndrew Litteken; CHECK-NEXT: ret void 4557a46914SAndrew Litteken; 4657a46914SAndrew Littekenentry: 4757a46914SAndrew Litteken %a = alloca i32, align 4 4857a46914SAndrew Litteken %b = alloca i32, align 4 4957a46914SAndrew Litteken %c = alloca i32, align 4 50*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 51*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 52*f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4 5357a46914SAndrew Litteken call void %func() 54*f4b925eeSMatt Arsenault %al = load i32, ptr %a 55*f4b925eeSMatt Arsenault %bl = load i32, ptr %b 56*f4b925eeSMatt Arsenault %cl = load i32, ptr %c 5757a46914SAndrew Litteken ret void 5857a46914SAndrew Litteken} 59