|
@@ -4,7 +4,8 @@
|
|
; Given:
|
|
; Given:
|
|
; sub %y, (xor %x, -1)
|
|
; sub %y, (xor %x, -1)
|
|
; Transform it to:
|
|
; Transform it to:
|
|
-; add (add %x, %y), 1
|
|
|
|
|
|
+; add (add %x, 1), %y
|
|
|
|
+; We prefer this form because that is what -reassociate would produce.
|
|
|
|
|
|
;------------------------------------------------------------------------------;
|
|
;------------------------------------------------------------------------------;
|
|
; Scalar tests
|
|
; Scalar tests
|
|
@@ -12,8 +13,8 @@
|
|
|
|
|
|
define i32 @p0_scalar(i32 %x, i32 %y) {
|
|
define i32 @p0_scalar(i32 %x, i32 %y) {
|
|
; CHECK-LABEL: @p0_scalar(
|
|
; CHECK-LABEL: @p0_scalar(
|
|
-; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
|
|
|
|
-; CHECK-NEXT: [[T1:%.*]] = sub i32 [[Y:%.*]], [[T0]]
|
|
|
|
|
|
+; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[Y:%.*]], 1
|
|
|
|
+; CHECK-NEXT: [[T1:%.*]] = add i32 [[TMP1]], [[X:%.*]]
|
|
; CHECK-NEXT: ret i32 [[T1]]
|
|
; CHECK-NEXT: ret i32 [[T1]]
|
|
;
|
|
;
|
|
%t0 = xor i32 %x, -1
|
|
%t0 = xor i32 %x, -1
|
|
@@ -27,8 +28,8 @@ define i32 @p0_scalar(i32 %x, i32 %y) {
|
|
|
|
|
|
define <4 x i32> @p1_vector_splat(<4 x i32> %x, <4 x i32> %y) {
|
|
define <4 x i32> @p1_vector_splat(<4 x i32> %x, <4 x i32> %y) {
|
|
; CHECK-LABEL: @p1_vector_splat(
|
|
; CHECK-LABEL: @p1_vector_splat(
|
|
-; CHECK-NEXT: [[T0:%.*]] = xor <4 x i32> [[X:%.*]], <i32 -1, i32 -1, i32 -1, i32 -1>
|
|
|
|
-; CHECK-NEXT: [[T1:%.*]] = sub <4 x i32> [[Y:%.*]], [[T0]]
|
|
|
|
|
|
+; CHECK-NEXT: [[TMP1:%.*]] = add <4 x i32> [[Y:%.*]], <i32 1, i32 1, i32 1, i32 1>
|
|
|
|
+; CHECK-NEXT: [[T1:%.*]] = add <4 x i32> [[TMP1]], [[X:%.*]]
|
|
; CHECK-NEXT: ret <4 x i32> [[T1]]
|
|
; CHECK-NEXT: ret <4 x i32> [[T1]]
|
|
;
|
|
;
|
|
%t0 = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>
|
|
%t0 = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>
|
|
@@ -38,8 +39,8 @@ define <4 x i32> @p1_vector_splat(<4 x i32> %x, <4 x i32> %y) {
|
|
|
|
|
|
define <4 x i32> @p2_vector_undef(<4 x i32> %x, <4 x i32> %y) {
|
|
define <4 x i32> @p2_vector_undef(<4 x i32> %x, <4 x i32> %y) {
|
|
; CHECK-LABEL: @p2_vector_undef(
|
|
; CHECK-LABEL: @p2_vector_undef(
|
|
-; CHECK-NEXT: [[T0:%.*]] = xor <4 x i32> [[X:%.*]], <i32 -1, i32 -1, i32 undef, i32 -1>
|
|
|
|
-; CHECK-NEXT: [[T1:%.*]] = sub <4 x i32> [[Y:%.*]], [[T0]]
|
|
|
|
|
|
+; CHECK-NEXT: [[TMP1:%.*]] = add <4 x i32> [[Y:%.*]], <i32 1, i32 1, i32 1, i32 1>
|
|
|
|
+; CHECK-NEXT: [[T1:%.*]] = add <4 x i32> [[TMP1]], [[X:%.*]]
|
|
; CHECK-NEXT: ret <4 x i32> [[T1]]
|
|
; CHECK-NEXT: ret <4 x i32> [[T1]]
|
|
;
|
|
;
|
|
%t0 = xor <4 x i32> %x, <i32 -1, i32 -1, i32 undef, i32 -1>
|
|
%t0 = xor <4 x i32> %x, <i32 -1, i32 -1, i32 undef, i32 -1>
|