1dae34463SAndrew 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 3dae34463SAndrew Litteken 4dae34463SAndrew Litteken; This is a negative case to show that when we have the same set of 5dae34463SAndrew Litteken; instructions, but in a different order, they are not outlined in the same way. 6dae34463SAndrew Litteken; In this case, the arguments passed into the function are in a different order. 7dae34463SAndrew Litteken 8dae34463SAndrew Littekendefine void @outline_constants1() { 9dae34463SAndrew Litteken; CHECK-LABEL: @outline_constants1( 10dae34463SAndrew Litteken; CHECK-NEXT: entry: 11dae34463SAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 12dae34463SAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 13dae34463SAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4 14*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 2, ptr [[A]], align 4 15*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 3, ptr [[B]], align 4 16*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 4, ptr [[C]], align 4 17*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @[[FUNCTION_0:.*]](ptr [[A]], ptr [[C]], ptr [[B]]) 18dae34463SAndrew Litteken; CHECK-NEXT: ret void 19dae34463SAndrew Litteken; 20dae34463SAndrew Littekenentry: 21dae34463SAndrew Litteken %a = alloca i32, align 4 22dae34463SAndrew Litteken %b = alloca i32, align 4 23dae34463SAndrew Litteken %c = alloca i32, align 4 24*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 25*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 26*f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4 27*f4b925eeSMatt Arsenault %al = load i32, ptr %a 28*f4b925eeSMatt Arsenault %cl = load i32, ptr %c 29*f4b925eeSMatt Arsenault %bl = load i32, ptr %b 30dae34463SAndrew Litteken ret void 31dae34463SAndrew Litteken} 32dae34463SAndrew Litteken 33dae34463SAndrew Littekendefine void @outline_constants2() { 34dae34463SAndrew Litteken; CHECK-LABEL: @outline_constants2( 35dae34463SAndrew Litteken; CHECK-NEXT: entry: 36dae34463SAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 37dae34463SAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 38dae34463SAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4 39*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 2, ptr [[A]], align 4 40*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 3, ptr [[B]], align 4 41*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 4, ptr [[C]], align 4 42*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @[[FUNCTION_0]](ptr [[A]], ptr [[B]], ptr [[C]]) 43dae34463SAndrew Litteken; CHECK-NEXT: ret void 44dae34463SAndrew Litteken; 45dae34463SAndrew Littekenentry: 46dae34463SAndrew Litteken %a = alloca i32, align 4 47dae34463SAndrew Litteken %b = alloca i32, align 4 48dae34463SAndrew Litteken %c = alloca i32, align 4 49*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 50*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 51*f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4 52*f4b925eeSMatt Arsenault %al = load i32, ptr %a 53*f4b925eeSMatt Arsenault %bl = load i32, ptr %b 54*f4b925eeSMatt Arsenault %cl = load i32, ptr %c 55dae34463SAndrew Litteken ret void 56dae34463SAndrew Litteken} 57dae34463SAndrew Litteken 58*f4b925eeSMatt Arsenault; CHECK: define internal void @[[FUNCTION_0]](ptr [[ARG0:%.*]], ptr [[ARG1:%.*]], ptr [[ARG2:%.*]]) 59dae34463SAndrew Litteken; CHECK: entry_to_outline: 60*f4b925eeSMatt Arsenault; CHECK-NEXT: [[AL:%.*]] = load i32, ptr [[ARG0]], align 4 61*f4b925eeSMatt Arsenault; CHECK-NEXT: [[BL:%.*]] = load i32, ptr [[ARG1]], align 4 62*f4b925eeSMatt Arsenault; CHECK-NEXT: [[CL:%.*]] = load i32, ptr [[ARG2]], align 4 63