1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3 2; RUN: opt < %s -S | FileCheck %s 3 4; A test that hits the quadratic runtime prevention in the diff algorithm and 5; a more complex case of name conflict avoidance. 6 7define i32 @func(i32 %x) { 8; CHECK-LABEL: define i32 @func( 9; CHECK-SAME: i32 [[X:%.*]]) { 10; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[X]], 3 11; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[TMP1]], 4 12; CHECK-NEXT: [[TMP3:%.*]] = call i32 @foo(i32 [[TMP2]]) 13; CHECK-NEXT: [[TMP4:%.*]] = call i32 @foo(i32 [[TMP3]]) 14; CHECK-NEXT: [[TMP5:%.*]] = call i32 @foo(i32 [[TMP4]]) 15; CHECK-NEXT: [[TMP6:%.*]] = call i32 @foo(i32 [[TMP5]]) 16; CHECK-NEXT: [[TMP7:%.*]] = call i32 @foo(i32 [[TMP6]]) 17; CHECK-NEXT: [[TMP8:%.*]] = call i32 @foo(i32 [[TMP7]]) 18; CHECK-NEXT: [[TMP9:%.*]] = call i32 @foo(i32 [[TMP8]]) 19; CHECK-NEXT: [[TMP10:%.*]] = call i32 @foo(i32 [[TMP9]]) 20; CHECK-NEXT: [[TMP11:%.*]] = call i32 @foo(i32 [[TMP10]]) 21; CHECK-NEXT: [[TMP12:%.*]] = call i32 @foo(i32 [[TMP11]]) 22; CHECK-NEXT: ret i32 [[TMP12]] 23; 24 %1 = mul i32 %x, 3 25 %2 = call i32 @foo(i32 %1) 26 %3 = call i32 @foo(i32 %2) 27 %4 = call i32 @foo(i32 %3) 28 %5 = call i32 @foo(i32 %4) 29 %6 = call i32 @foo(i32 %5) 30 %7 = call i32 @foo(i32 %6) 31 %8 = xor i32 %7, 1 32 %9 = call i32 @foo(i32 %8) 33 %10 = add i32 %9, 1 34 %11 = call i32 @foo(i32 %10) 35 %12 = call i32 @foo(i32 %11) 36 %13 = call i32 @foo(i32 %12) 37 38 ret i32 %13 39} 40 41declare i32 @foo(i1) 42