13785c1d0SAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs 29dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s 33785c1d0SAndrew Litteken 43785c1d0SAndrew Litteken; This test checks that we successfully outline identical memset instructions. 53785c1d0SAndrew Litteken 6*f4b925eeSMatt Arsenaultdeclare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i32, i1) 73785c1d0SAndrew Litteken 83785c1d0SAndrew Littekendefine i64 @function1(i64 %x, i64 %z, i64 %n) { 93785c1d0SAndrew Littekenentry: 103785c1d0SAndrew Litteken %pool = alloca [59 x i64], align 4 11*f4b925eeSMatt Arsenault call void @llvm.memset.p0.i64(ptr nonnull %pool, i8 0, i64 236, i32 4, i1 false) 123785c1d0SAndrew Litteken %cmp3 = icmp eq i64 %n, 0 133785c1d0SAndrew Litteken %a = add i64 %x, %z 143785c1d0SAndrew Litteken %c = add i64 %x, %z 153785c1d0SAndrew Litteken ret i64 0 163785c1d0SAndrew Litteken} 173785c1d0SAndrew Litteken 183785c1d0SAndrew Littekendefine i64 @function2(i64 %x, i64 %z, i64 %n) { 193785c1d0SAndrew Littekenentry: 203785c1d0SAndrew Litteken %pool = alloca [59 x i64], align 4 21*f4b925eeSMatt Arsenault call void @llvm.memset.p0.i64(ptr nonnull %pool, i8 0, i64 236, i32 4, i1 false) 223785c1d0SAndrew Litteken %cmp3 = icmp eq i64 %n, 0 233785c1d0SAndrew Litteken %a = add i64 %x, %z 243785c1d0SAndrew Litteken %c = add i64 %x, %z 253785c1d0SAndrew Litteken ret i64 0 263785c1d0SAndrew Litteken} 273785c1d0SAndrew Litteken; CHECK-LABEL: @function1( 283785c1d0SAndrew Litteken; CHECK-NEXT: entry: 293785c1d0SAndrew Litteken; CHECK-NEXT: [[POOL:%.*]] = alloca [59 x i64], align 4 30*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[POOL]], i64 [[N:%.*]], i64 [[X:%.*]], i64 [[Z:%.*]]) 313785c1d0SAndrew Litteken; CHECK-NEXT: ret i64 0 323785c1d0SAndrew Litteken; 333785c1d0SAndrew Litteken; 343785c1d0SAndrew Litteken; CHECK-LABEL: @function2( 353785c1d0SAndrew Litteken; CHECK-NEXT: entry: 363785c1d0SAndrew Litteken; CHECK-NEXT: [[POOL:%.*]] = alloca [59 x i64], align 4 37*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[POOL]], i64 [[N:%.*]], i64 [[X:%.*]], i64 [[Z:%.*]]) 383785c1d0SAndrew Litteken; CHECK-NEXT: ret i64 0 393785c1d0SAndrew Litteken; 403785c1d0SAndrew Litteken; 413785c1d0SAndrew Litteken; CHECK: define internal void @outlined_ir_func_0( 423785c1d0SAndrew Litteken; CHECK-NEXT: newFuncRoot: 433785c1d0SAndrew Litteken; CHECK-NEXT: br label [[ENTRY_TO_OUTLINE:%.*]] 443785c1d0SAndrew Litteken; CHECK: entry_to_outline: 45*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr nonnull align 4 [[TMP0:%.*]], i8 0, i64 236, i1 false) 463785c1d0SAndrew Litteken; CHECK-NEXT: [[CMP3:%.*]] = icmp eq i64 [[TMP1:%.*]], 0 473785c1d0SAndrew Litteken; CHECK-NEXT: [[A:%.*]] = add i64 [[TMP2:%.*]], [[TMP3:%.*]] 483785c1d0SAndrew Litteken; CHECK-NEXT: [[C:%.*]] = add i64 [[TMP2]], [[TMP3]] 493785c1d0SAndrew Litteken; CHECK-NEXT: br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]] 503785c1d0SAndrew Litteken; CHECK: entry_after_outline.exitStub: 513785c1d0SAndrew Litteken; CHECK-NEXT: ret void 523785c1d0SAndrew Litteken; 53