1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=instsimplify -S | FileCheck %s 3 4; PR8862 5 6define i32 @shift1(i32 %A, i32 %B) { 7; CHECK-LABEL: @shift1( 8; CHECK-NEXT: ret i32 [[A:%.*]] 9; 10 %C = lshr exact i32 %A, %B 11 %D = shl nuw i32 %C, %B 12 ret i32 %D 13} 14 15define i32 @shift2(i32 %A, i32 %B) { 16; CHECK-LABEL: @shift2( 17; CHECK-NEXT: [[C:%.*]] = lshr i32 [[A:%.*]], [[B:%.*]] 18; CHECK-NEXT: [[D:%.*]] = shl nuw i32 [[C]], [[B]] 19; CHECK-NEXT: ret i32 [[D]] 20; 21 %C = lshr i32 %A, %B 22 %D = shl nuw i32 %C, %B 23 ret i32 %D 24} 25 26define i32 @shift3(i32 %A, i32 %B) { 27; CHECK-LABEL: @shift3( 28; CHECK-NEXT: ret i32 [[A:%.*]] 29; 30 %C = ashr exact i32 %A, %B 31 %D = shl nuw i32 %C, %B 32 ret i32 %D 33} 34 35define i32 @shift4(i32 %A, i32 %B) { 36; CHECK-LABEL: @shift4( 37; CHECK-NEXT: ret i32 [[A:%.*]] 38; 39 %C = shl nuw i32 %A, %B 40 %D = lshr i32 %C, %B 41 ret i32 %D 42} 43 44define i32 @shift5(i32 %A, i32 %B) { 45; CHECK-LABEL: @shift5( 46; CHECK-NEXT: ret i32 [[A:%.*]] 47; 48 %C = shl nsw i32 %A, %B 49 %D = ashr i32 %C, %B 50 ret i32 %D 51} 52 53define i32 @div1(i32 %V) { 54; CHECK-LABEL: @div1( 55; CHECK-NEXT: ret i32 0 56; 57 %A = udiv i32 %V, -2147483648 58 %B = udiv i32 %A, -2147483648 59 ret i32 %B 60} 61 62define i32 @div2(i32 %V) { 63; CHECK-LABEL: @div2( 64; CHECK-NEXT: ret i32 0 65; 66 %A = sdiv i32 %V, -1 67 %B = sdiv i32 %A, -2147483648 68 ret i32 %B 69} 70 71