@@ -1647,6 +1647,54 @@ define i32 @test_umin_sub1_nuw(i32 %x, i32 range(i32 1, 0) %w) {
16471647 ret i32 %r
16481648}
16491649
1650+ define i32 @test_smin_sub1_nsw_swapped (i32 %x , i32 %w ) {
1651+ ; CHECK-LABEL: @test_smin_sub1_nsw_swapped(
1652+ ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[W:%.*]], -1
1653+ ; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.smin.i32(i32 [[X:%.*]], i32 [[SUB]])
1654+ ; CHECK-NEXT: ret i32 [[R]]
1655+ ;
1656+ %cmp = icmp sgt i32 %w , %x
1657+ %sub = add nsw i32 %w , -1
1658+ %r = select i1 %cmp , i32 %x , i32 %sub
1659+ ret i32 %r
1660+ }
1661+
1662+ define i32 @test_smax_add1_nsw_swapped (i32 %x , i32 %w ) {
1663+ ; CHECK-LABEL: @test_smax_add1_nsw_swapped(
1664+ ; CHECK-NEXT: [[X2:%.*]] = add nsw i32 [[W:%.*]], 1
1665+ ; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.smax.i32(i32 [[X:%.*]], i32 [[X2]])
1666+ ; CHECK-NEXT: ret i32 [[R]]
1667+ ;
1668+ %cmp = icmp slt i32 %w , %x
1669+ %add = add nsw i32 %w , 1
1670+ %r = select i1 %cmp , i32 %x , i32 %add
1671+ ret i32 %r
1672+ }
1673+
1674+ define i32 @test_umax_add1_nuw_swapped (i32 %x , i32 %w ) {
1675+ ; CHECK-LABEL: @test_umax_add1_nuw_swapped(
1676+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[W:%.*]], 1
1677+ ; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.umax.i32(i32 [[X:%.*]], i32 [[ADD]])
1678+ ; CHECK-NEXT: ret i32 [[R]]
1679+ ;
1680+ %cmp = icmp ult i32 %w , %x
1681+ %add = add nuw i32 %w , 1
1682+ %r = select i1 %cmp , i32 %x , i32 %add
1683+ ret i32 %r
1684+ }
1685+
1686+ define i32 @test_umin_sub1_nuw_swapped (i32 %x , i32 range(i32 1 , 0 ) %w ) {
1687+ ; CHECK-LABEL: @test_umin_sub1_nuw_swapped(
1688+ ; CHECK-NEXT: [[SUB:%.*]] = add i32 [[W:%.*]], -1
1689+ ; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.umin.i32(i32 [[X:%.*]], i32 [[SUB]])
1690+ ; CHECK-NEXT: ret i32 [[R]]
1691+ ;
1692+ %cmp = icmp ugt i32 %w , %x
1693+ %sub = add i32 %w , -1
1694+ %r = select i1 %cmp , i32 %x , i32 %sub
1695+ ret i32 %r
1696+ }
1697+
16501698define <2 x i16 > @test_smin_sub1_nsw_vec (<2 x i16 > %x , <2 x i16 > %w ) {
16511699; CHECK-LABEL: @test_smin_sub1_nsw_vec(
16521700; CHECK-NEXT: [[SUB:%.*]] = add nsw <2 x i16> [[W:%.*]], splat (i16 -1)
0 commit comments