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:%.*]] = call i32 @foo(i32 [[TMP1]]) 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:%.*]] = xor i32 [[TMP7]], 1 18; CHECK-NEXT: [[TMP13:%.*]] = call i32 @foo(i32 [[TMP8]]) 19; CHECK-NEXT: [[TMP9:%.*]] = add i32 [[TMP13]], 1 20; CHECK-NEXT: [[TMP10:%.*]] = call i32 @foo(i32 [[TMP9]]) 21; CHECK-NEXT: [[TMP11:%.*]] = call i32 @foo(i32 [[TMP10]]) 22; CHECK-NEXT: [[TMP12:%.*]] = call i32 @foo(i32 [[TMP11]]) 23; CHECK-NEXT: ret i32 [[TMP12]] 24; 25 %1 = mul i32 %x, 3 26 %2 = call i32 @foo(i32 %1) 27 %3 = call i32 @foo(i32 %2) 28 %4 = call i32 @foo(i32 %3) 29 %5 = call i32 @foo(i32 %4) 30 %6 = call i32 @foo(i32 %5) 31 %7 = call i32 @foo(i32 %6) 32 %8 = xor i32 %7, 1 33 %9 = call i32 @foo(i32 %8) 34 %10 = add i32 %9, 1 35 %11 = call i32 @foo(i32 %10) 36 %12 = call i32 @foo(i32 %11) 37 %13 = call i32 @foo(i32 %12) 38 39 ret i32 %13 40} 41 42declare i32 @foo(i1) 43