1fe431103SAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 29dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner --ir-outlining-no-cost < %s | FileCheck %s 39dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner -enable-linkonceodr-ir-outlining --ir-outlining-no-cost < %s | FileCheck -check-prefix=ODR %s 4fe431103SAndrew Litteken 5fe431103SAndrew Litteken; This test looks at the constants in the regions, and if it they are the 6fe431103SAndrew Litteken; same it outlines them as constants rather than elevating them to arguments. 7fe431103SAndrew Litteken 8fe431103SAndrew Littekendefine linkonce_odr void @outline_odr1() { 9fe431103SAndrew Litteken; ODR-LABEL: @outline_odr1( 10fe431103SAndrew Litteken; ODR-NEXT: entry: 11fe431103SAndrew Litteken; ODR-NEXT: [[A:%.*]] = alloca i32, align 4 12fe431103SAndrew Litteken; ODR-NEXT: [[B:%.*]] = alloca i32, align 4 13fe431103SAndrew Litteken; ODR-NEXT: [[C:%.*]] = alloca i32, align 4 14*f4b925eeSMatt Arsenault; ODR-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]]) 15fe431103SAndrew Litteken; ODR-NEXT: ret void 16fe431103SAndrew Litteken; CHECK-LABEL: @outline_odr1( 17fe431103SAndrew Litteken; CHECK-NEXT: entry: 18fe431103SAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 19fe431103SAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 20fe431103SAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4 21*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 2, ptr [[A]], align 4 22*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 3, ptr [[B]], align 4 23*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 4, ptr [[C]], align 4 24*f4b925eeSMatt Arsenault; CHECK-NEXT: [[AL:%.*]] = load i32, ptr [[A]], align 4 25*f4b925eeSMatt Arsenault; CHECK-NEXT: [[BL:%.*]] = load i32, ptr [[B]], align 4 26*f4b925eeSMatt Arsenault; CHECK-NEXT: [[CL:%.*]] = load i32, ptr [[C]], align 4 27fe431103SAndrew Littekenentry: 28fe431103SAndrew Litteken %a = alloca i32, align 4 29fe431103SAndrew Litteken %b = alloca i32, align 4 30fe431103SAndrew Litteken %c = alloca i32, align 4 31*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 32*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 33*f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4 34*f4b925eeSMatt Arsenault %al = load i32, ptr %a 35*f4b925eeSMatt Arsenault %bl = load i32, ptr %b 36*f4b925eeSMatt Arsenault %cl = load i32, ptr %c 37fe431103SAndrew Litteken ret void 38fe431103SAndrew Litteken} 39fe431103SAndrew Litteken 40fe431103SAndrew Littekendefine void @outline_odr2() { 41fe431103SAndrew Litteken; ODR-LABEL: @outline_odr2( 42fe431103SAndrew Litteken; ODR-NEXT: entry: 43fe431103SAndrew Litteken; ODR-NEXT: [[A:%.*]] = alloca i32, align 4 44fe431103SAndrew Litteken; ODR-NEXT: [[B:%.*]] = alloca i32, align 4 45fe431103SAndrew Litteken; ODR-NEXT: [[C:%.*]] = alloca i32, align 4 46*f4b925eeSMatt Arsenault; ODR-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]]) 47fe431103SAndrew Litteken; ODR-NEXT: ret void 48fe431103SAndrew Litteken; CHECK-LABEL: @outline_odr2( 49fe431103SAndrew Litteken; CHECK-NEXT: entry: 50fe431103SAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 51fe431103SAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 52fe431103SAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4 53*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 2, ptr [[A]], align 4 54*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 3, ptr [[B]], align 4 55*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 4, ptr [[C]], align 4 56*f4b925eeSMatt Arsenault; CHECK-NEXT: [[AL:%.*]] = load i32, ptr [[A]], align 4 57*f4b925eeSMatt Arsenault; CHECK-NEXT: [[BL:%.*]] = load i32, ptr [[B]], align 4 58*f4b925eeSMatt Arsenault; CHECK-NEXT: [[CL:%.*]] = load i32, ptr [[C]], align 4 59fe431103SAndrew Littekenentry: 60fe431103SAndrew Litteken %a = alloca i32, align 4 61fe431103SAndrew Litteken %b = alloca i32, align 4 62fe431103SAndrew Litteken %c = alloca i32, align 4 63*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 64*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 65*f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4 66*f4b925eeSMatt Arsenault %al = load i32, ptr %a 67*f4b925eeSMatt Arsenault %bl = load i32, ptr %b 68*f4b925eeSMatt Arsenault %cl = load i32, ptr %c 69fe431103SAndrew Litteken ret void 70fe431103SAndrew Litteken} 71