11a9eb19aSAndrew 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" 31a9eb19aSAndrew Litteken 41a9eb19aSAndrew Litteken; This has two compatible regions. We have attributes that should be transferred 51a9eb19aSAndrew Litteken; even if it is on only one of the regions. 61a9eb19aSAndrew Litteken 71a9eb19aSAndrew Litteken; This includes the attributes no-jump-tables, profile-sample-accurate, 81a9eb19aSAndrew Litteken; speculative_load_hardening, and noimplicitfloat. When instance of similarity 91a9eb19aSAndrew Litteken; has these attributes can we say that the outlined function can have these 101a9eb19aSAndrew Litteken; attributes since that is the more general case. 111a9eb19aSAndrew Litteken 121a9eb19aSAndrew Littekendefine void @outline_attrs1() #0 { 131a9eb19aSAndrew Litteken; CHECK-LABEL: @outline_attrs1( 141a9eb19aSAndrew Litteken; CHECK-NEXT: entry: 151a9eb19aSAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 161a9eb19aSAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 171a9eb19aSAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4 18*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]]) 191a9eb19aSAndrew Litteken; CHECK-NEXT: ret void 201a9eb19aSAndrew Litteken; 211a9eb19aSAndrew Littekenentry: 221a9eb19aSAndrew Litteken %a = alloca i32, align 4 231a9eb19aSAndrew Litteken %b = alloca i32, align 4 241a9eb19aSAndrew 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 28*f4b925eeSMatt Arsenault %al = load i32, ptr %a 29*f4b925eeSMatt Arsenault %bl = load i32, ptr %b 30*f4b925eeSMatt Arsenault %cl = load i32, ptr %c 311a9eb19aSAndrew Litteken ret void 321a9eb19aSAndrew Litteken} 331a9eb19aSAndrew Litteken 341a9eb19aSAndrew Littekendefine void @outline_attrs2() { 351a9eb19aSAndrew Litteken; CHECK-LABEL: @outline_attrs2( 361a9eb19aSAndrew Litteken; CHECK-NEXT: entry: 371a9eb19aSAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 381a9eb19aSAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 391a9eb19aSAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4 40*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]]) 411a9eb19aSAndrew Litteken; CHECK-NEXT: ret void 421a9eb19aSAndrew Litteken; 431a9eb19aSAndrew Littekenentry: 441a9eb19aSAndrew Litteken %a = alloca i32, align 4 451a9eb19aSAndrew Litteken %b = alloca i32, align 4 461a9eb19aSAndrew Litteken %c = alloca i32, align 4 47*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 48*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 49*f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4 50*f4b925eeSMatt Arsenault %al = load i32, ptr %a 51*f4b925eeSMatt Arsenault %bl = load i32, ptr %b 52*f4b925eeSMatt Arsenault %cl = load i32, ptr %c 531a9eb19aSAndrew Litteken ret void 541a9eb19aSAndrew Litteken} 551a9eb19aSAndrew Litteken 564ab3041aSserge-sans-pailleattributes #0 = { "no-jump-tables"="true" "profile-sample-accurate"="true" "speculative_load_hardening" "noimplicitfloat"="true" "use-sample-profile"="true"} 571a9eb19aSAndrew Litteken 58*f4b925eeSMatt Arsenault; CHECK: define internal void @outlined_ir_func_0(ptr [[ARG0:%.*]], ptr [[ARG1:%.*]], ptr [[ARG2:%.*]]) [[ATTR:#[0-9]+]] { 591a9eb19aSAndrew Litteken; CHECK: entry_to_outline: 60*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 2, ptr [[ARG0]], align 4 61*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 3, ptr [[ARG1]], align 4 62*f4b925eeSMatt Arsenault; CHECK-NEXT: store i32 4, ptr [[ARG2]], align 4 63*f4b925eeSMatt Arsenault; CHECK-NEXT: [[AL:%.*]] = load i32, ptr [[ARG0]], align 4 64*f4b925eeSMatt Arsenault; CHECK-NEXT: [[BL:%.*]] = load i32, ptr [[ARG1]], align 4 65*f4b925eeSMatt Arsenault; CHECK-NEXT: [[CL:%.*]] = load i32, ptr [[ARG2]], align 4 661a9eb19aSAndrew Litteken 674ab3041aSserge-sans-paille; CHECK: attributes [[ATTR]] = { minsize optsize "no-jump-tables"="true" "noimplicitfloat"="true" "profile-sample-accurate"="true" "speculative_load_hardening" "use-sample-profile"="true" } 68