1fba1f36dSAnton Afanasyev; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*8ebb3eacSBjorn Pettersson; RUN: opt < %s -passes=sccp -S | FileCheck %s 3fba1f36dSAnton Afanasyev 4fba1f36dSAnton Afanasyevdefine i1 @foo(i32 %t4, i32 %t10) { 5fba1f36dSAnton Afanasyev; CHECK-LABEL: @foo( 6fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T09:%.*]] = shl i32 [[T10:%.*]], 24 7fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T010:%.*]] = ashr exact i32 [[T09]], 24 8fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T011:%.*]] = add nsw i32 [[T010]], 979 9fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T11:%.*]] = trunc i32 [[T4:%.*]] to i8 10fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T12:%.*]] = icmp eq i8 [[T11]], 0 11fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T14:%.*]] = zext i1 [[T12]] to i32 12fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T15:%.*]] = shl i32 [[T4]], [[T14]] 13fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T17:%.*]] = and i32 [[T15]], 255 14fba1f36dSAnton Afanasyev; CHECK-NEXT: ret i1 false 15fba1f36dSAnton Afanasyev; 16fba1f36dSAnton Afanasyev %t09 = shl i32 %t10, 24 17fba1f36dSAnton Afanasyev %t010 = ashr exact i32 %t09, 24 18fba1f36dSAnton Afanasyev %t011 = add nsw i32 %t010, 979 19fba1f36dSAnton Afanasyev %t11 = trunc i32 %t4 to i8 20fba1f36dSAnton Afanasyev %t12 = icmp eq i8 %t11, 0 21fba1f36dSAnton Afanasyev %t14 = zext i1 %t12 to i32 22fba1f36dSAnton Afanasyev %t15 = shl i32 %t4, %t14 23fba1f36dSAnton Afanasyev %t17 = and i32 %t15, 255 24fba1f36dSAnton Afanasyev %t18 = icmp eq i32 %t011, %t17 25fba1f36dSAnton Afanasyev ret i1 %t18 26fba1f36dSAnton Afanasyev} 27fba1f36dSAnton Afanasyev 28fba1f36dSAnton Afanasyevdefine i1 @bar(i32 %t4, i32 %t10) { 29fba1f36dSAnton Afanasyev; CHECK-LABEL: @bar( 30fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T09:%.*]] = shl i32 [[T10:%.*]], 24 31fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T010:%.*]] = ashr exact i32 [[T09]], 24 32fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T011:%.*]] = add nsw i32 [[T010]], 979 33fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T11:%.*]] = trunc i32 [[T4:%.*]] to i8 34fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T12:%.*]] = icmp eq i8 [[T11]], 0 35fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T14:%.*]] = zext i1 [[T12]] to i8 36fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T15:%.*]] = shl i8 [[T11]], [[T14]] 37fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T17:%.*]] = zext i8 [[T15]] to i32 38ce4fa93dSAnton Afanasyev; CHECK-NEXT: ret i1 false 39fba1f36dSAnton Afanasyev; 40fba1f36dSAnton Afanasyev %t09 = shl i32 %t10, 24 41fba1f36dSAnton Afanasyev %t010 = ashr exact i32 %t09, 24 42fba1f36dSAnton Afanasyev %t011 = add nsw i32 %t010, 979 43fba1f36dSAnton Afanasyev %t11 = trunc i32 %t4 to i8 44fba1f36dSAnton Afanasyev %t12 = icmp eq i8 %t11, 0 45fba1f36dSAnton Afanasyev %t14 = zext i1 %t12 to i8 46fba1f36dSAnton Afanasyev %t15 = shl i8 %t11, %t14 47fba1f36dSAnton Afanasyev %t17 = zext i8 %t15 to i32 48fba1f36dSAnton Afanasyev %t18 = icmp eq i32 %t011, %t17 49fba1f36dSAnton Afanasyev ret i1 %t18 50fba1f36dSAnton Afanasyev} 51fba1f36dSAnton Afanasyev 52fba1f36dSAnton Afanasyevdefine i1 @foobar(i32 %t4, i32 %t10) { 53fba1f36dSAnton Afanasyev; CHECK-LABEL: @foobar( 54fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T09:%.*]] = shl i32 [[T10:%.*]], 24 55fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T010:%.*]] = ashr exact i32 [[T09]], 24 56fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T011:%.*]] = add nsw i32 [[T010]], 979 57fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T11:%.*]] = trunc i32 [[T4:%.*]] to i8 58fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T12:%.*]] = icmp eq i8 [[T11]], 0 59fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T13:%.*]] = zext i8 [[T11]] to i32 60fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T14:%.*]] = select i1 [[T12]], i32 1, i32 0 61fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T15:%.*]] = shl nuw nsw i32 [[T13]], [[T14]] 62fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T16:%.*]] = trunc i32 [[T15]] to i8 63fba1f36dSAnton Afanasyev; CHECK-NEXT: [[T17:%.*]] = zext i8 [[T16]] to i32 64ce4fa93dSAnton Afanasyev; CHECK-NEXT: ret i1 false 65fba1f36dSAnton Afanasyev; 66fba1f36dSAnton Afanasyev %t09 = shl i32 %t10, 24 67fba1f36dSAnton Afanasyev %t010 = ashr exact i32 %t09, 24 68fba1f36dSAnton Afanasyev %t011 = add nsw i32 %t010, 979 69fba1f36dSAnton Afanasyev 70fba1f36dSAnton Afanasyev %t11 = trunc i32 %t4 to i8 71fba1f36dSAnton Afanasyev %t12 = icmp eq i8 %t11, 0 72fba1f36dSAnton Afanasyev %t13 = zext i8 %t11 to i32 73fba1f36dSAnton Afanasyev %t14 = select i1 %t12, i32 1, i32 0 74fba1f36dSAnton Afanasyev %t15 = shl nuw nsw i32 %t13, %t14 75fba1f36dSAnton Afanasyev %t16 = trunc i32 %t15 to i8 76fba1f36dSAnton Afanasyev %t17 = zext i8 %t16 to i32 77fba1f36dSAnton Afanasyev 78fba1f36dSAnton Afanasyev %t18 = icmp eq i32 %t011, %t17 79fba1f36dSAnton Afanasyev ret i1 %t18 80fba1f36dSAnton Afanasyev} 81