@@ -981,3 +981,33 @@ define i16 @check_rotate_masked_16bit(i8 %shamt, i32 %cond) {
981981 %trunc = trunc i32 %or to i16
982982 ret i16 %trunc
983983}
984+
985+ define i32 @rotl_i32_add (i32 %x , i32 %y ) {
986+ ; CHECK-LABEL: @rotl_i32_add(
987+ ; CHECK-NEXT: [[SUB:%.*]] = sub i32 32, [[Y:%.*]]
988+ ; CHECK-NEXT: [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y]]
989+ ; CHECK-NEXT: [[SHR:%.*]] = lshr i32 [[X]], [[SUB]]
990+ ; CHECK-NEXT: [[R:%.*]] = add i32 [[SHR]], [[SHL]]
991+ ; CHECK-NEXT: ret i32 [[R]]
992+ ;
993+ %sub = sub i32 32 , %y
994+ %shl = shl i32 %x , %y
995+ %shr = lshr i32 %x , %sub
996+ %r = add i32 %shr , %shl
997+ ret i32 %r
998+ }
999+
1000+ define i32 @rotr_i32_add (i32 %x , i32 %y ) {
1001+ ; CHECK-LABEL: @rotr_i32_add(
1002+ ; CHECK-NEXT: [[SUB:%.*]] = sub i32 32, [[Y:%.*]]
1003+ ; CHECK-NEXT: [[SHL:%.*]] = lshr i32 [[X:%.*]], [[Y]]
1004+ ; CHECK-NEXT: [[SHR:%.*]] = shl i32 [[X]], [[SUB]]
1005+ ; CHECK-NEXT: [[R:%.*]] = add i32 [[SHR]], [[SHL]]
1006+ ; CHECK-NEXT: ret i32 [[R]]
1007+ ;
1008+ %sub = sub i32 32 , %y
1009+ %shl = lshr i32 %x , %y
1010+ %shr = shl i32 %x , %sub
1011+ %r = add i32 %shr , %shl
1012+ ret i32 %r
1013+ }
0 commit comments