@@ -3841,9 +3841,13 @@ entry:
3841
3841
define i32 @src_and_eq_C_or_xororC (i32 %x , i32 %y , i32 %c ) {
3842
3842
; CHECK-LABEL: @src_and_eq_C_or_xororC(
3843
3843
; CHECK-NEXT: entry:
3844
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
3845
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[XOR]], [[C:%.*]]
3846
- ; CHECK-NEXT: ret i32 [[OR1]]
3844
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
3845
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], [[C:%.*]]
3846
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
3847
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y]], [[X]]
3848
+ ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[XOR]], [[C]]
3849
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[OR]], i32 [[OR1]]
3850
+ ; CHECK-NEXT: ret i32 [[COND]]
3847
3851
;
3848
3852
entry:
3849
3853
%and = and i32 %y , %x
@@ -3858,9 +3862,13 @@ entry:
3858
3862
define i32 @src_and_eq_C_or_xorxorC (i32 %x , i32 %y , i32 %c ) {
3859
3863
; CHECK-LABEL: @src_and_eq_C_or_xorxorC(
3860
3864
; CHECK-NEXT: entry:
3861
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
3862
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[XOR]], [[C:%.*]]
3863
- ; CHECK-NEXT: ret i32 [[XOR1]]
3865
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
3866
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], [[C:%.*]]
3867
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
3868
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y]], [[X]]
3869
+ ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[XOR]], [[C]]
3870
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[OR]], i32 [[XOR1]]
3871
+ ; CHECK-NEXT: ret i32 [[COND]]
3864
3872
;
3865
3873
entry:
3866
3874
%and = and i32 %y , %x
@@ -3875,10 +3883,14 @@ entry:
3875
3883
define i32 @src_and_eq_C_xor_OrAndNotC (i32 %x , i32 %y , i32 %c ) {
3876
3884
; CHECK-LABEL: @src_and_eq_C_xor_OrAndNotC(
3877
3885
; CHECK-NEXT: entry:
3878
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
3879
- ; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[C:%.*]], -1
3886
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
3887
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], [[C:%.*]]
3888
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y]], [[X]]
3889
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
3890
+ ; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[C]], -1
3880
3891
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[OR]], [[NOT]]
3881
- ; CHECK-NEXT: ret i32 [[AND1]]
3892
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[XOR]], i32 [[AND1]]
3893
+ ; CHECK-NEXT: ret i32 [[COND]]
3882
3894
;
3883
3895
entry:
3884
3896
%and = and i32 %y , %x
@@ -3917,9 +3929,13 @@ entry:
3917
3929
define i32 @src_and_eq_C_xor_orxorC (i32 %x , i32 %y , i32 %c ) {
3918
3930
; CHECK-LABEL: @src_and_eq_C_xor_orxorC(
3919
3931
; CHECK-NEXT: entry:
3920
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
3921
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[OR]], [[C:%.*]]
3922
- ; CHECK-NEXT: ret i32 [[XOR1]]
3932
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
3933
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], [[C:%.*]]
3934
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y]], [[X]]
3935
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
3936
+ ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[OR]], [[C]]
3937
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[XOR]], i32 [[XOR1]]
3938
+ ; CHECK-NEXT: ret i32 [[COND]]
3923
3939
;
3924
3940
entry:
3925
3941
%and = and i32 %y , %x
@@ -3968,9 +3984,13 @@ entry:
3968
3984
define i32 @src_or_eq_neg1_and_xor (i32 %x , i32 %y ) {
3969
3985
; CHECK-LABEL: @src_or_eq_neg1_and_xor(
3970
3986
; CHECK-NEXT: entry:
3971
- ; CHECK-NEXT: [[TMP0:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
3987
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
3988
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[OR]], -1
3989
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
3990
+ ; CHECK-NEXT: [[TMP0:%.*]] = xor i32 [[X]], [[Y]]
3972
3991
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[TMP0]], -1
3973
- ; CHECK-NEXT: ret i32 [[NOT]]
3992
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[AND]], i32 [[NOT]]
3993
+ ; CHECK-NEXT: ret i32 [[COND]]
3974
3994
;
3975
3995
entry:
3976
3996
%or = or i32 %y , %x
@@ -3985,9 +4005,13 @@ entry:
3985
4005
define i32 @src_or_eq_neg1_xor_and (i32 %x , i32 %y ) {
3986
4006
; CHECK-LABEL: @src_or_eq_neg1_xor_and(
3987
4007
; CHECK-NEXT: entry:
3988
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
4008
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
4009
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[OR]], -1
4010
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y]], [[X]]
4011
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
3989
4012
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[AND]], -1
3990
- ; CHECK-NEXT: ret i32 [[NOT]]
4013
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[XOR]], i32 [[NOT]]
4014
+ ; CHECK-NEXT: ret i32 [[COND]]
3991
4015
;
3992
4016
entry:
3993
4017
%or = or i32 %y , %x
@@ -4002,9 +4026,13 @@ entry:
4002
4026
define i32 @src_or_eq_C_and_xorC (i32 %x , i32 %y , i32 %c ) {
4003
4027
; CHECK-LABEL: @src_or_eq_C_and_xorC(
4004
4028
; CHECK-NEXT: entry:
4005
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
4006
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[XOR]], [[C:%.*]]
4007
- ; CHECK-NEXT: ret i32 [[XOR1]]
4029
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
4030
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[OR]], [[C:%.*]]
4031
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4032
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y]], [[X]]
4033
+ ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[XOR]], [[C]]
4034
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[AND]], i32 [[XOR1]]
4035
+ ; CHECK-NEXT: ret i32 [[COND]]
4008
4036
;
4009
4037
entry:
4010
4038
%or = or i32 %y , %x
@@ -4019,10 +4047,14 @@ entry:
4019
4047
define i32 @src_or_eq_C_and_andnotxorC (i32 %x , i32 %y , i32 %c ) {
4020
4048
; CHECK-LABEL: @src_or_eq_C_and_andnotxorC(
4021
4049
; CHECK-NEXT: entry:
4022
- ; CHECK-NEXT: [[TMP0:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
4050
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
4051
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[OR]], [[C:%.*]]
4052
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4053
+ ; CHECK-NEXT: [[TMP0:%.*]] = xor i32 [[X]], [[Y]]
4023
4054
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[TMP0]], -1
4024
- ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[C:%.*]], [[NOT]]
4025
- ; CHECK-NEXT: ret i32 [[AND1]]
4055
+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[C]], [[NOT]]
4056
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[AND]], i32 [[AND1]]
4057
+ ; CHECK-NEXT: ret i32 [[COND]]
4026
4058
;
4027
4059
entry:
4028
4060
%or = or i32 %y , %x
@@ -4038,9 +4070,13 @@ entry:
4038
4070
define i32 @src_or_eq_C_xor_xorandC (i32 %x , i32 %y , i32 %c ) {
4039
4071
; CHECK-LABEL: @src_or_eq_C_xor_xorandC(
4040
4072
; CHECK-NEXT: entry:
4041
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
4042
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[AND]], [[C:%.*]]
4043
- ; CHECK-NEXT: ret i32 [[XOR1]]
4073
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
4074
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[OR]], [[C:%.*]]
4075
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y]], [[X]]
4076
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4077
+ ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[AND]], [[C]]
4078
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[XOR]], i32 [[XOR1]]
4079
+ ; CHECK-NEXT: ret i32 [[COND]]
4044
4080
;
4045
4081
entry:
4046
4082
%or = or i32 %y , %x
@@ -4055,10 +4091,14 @@ entry:
4055
4091
define i32 @src_or_eq_C_xor_andnotandC (i32 %x , i32 %y , i32 %c ) {
4056
4092
; CHECK-LABEL: @src_or_eq_C_xor_andnotandC(
4057
4093
; CHECK-NEXT: entry:
4058
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
4094
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
4095
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[OR]], [[C:%.*]]
4096
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y]], [[X]]
4097
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4059
4098
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[AND]], -1
4060
- ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[C:%.*]], [[NOT]]
4061
- ; CHECK-NEXT: ret i32 [[AND1]]
4099
+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[C]], [[NOT]]
4100
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[XOR]], i32 [[AND1]]
4101
+ ; CHECK-NEXT: ret i32 [[COND]]
4062
4102
;
4063
4103
entry:
4064
4104
%or = or i32 %y , %x
@@ -4076,9 +4116,13 @@ entry:
4076
4116
define i32 @src_xor_eq_neg1_and (i32 %x , i32 %y ) {
4077
4117
; CHECK-LABEL: @src_xor_eq_neg1_and(
4078
4118
; CHECK-NEXT: entry:
4079
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
4119
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
4120
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[XOR]], -1
4121
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4122
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
4080
4123
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[OR]], -1
4081
- ; CHECK-NEXT: ret i32 [[NOT]]
4124
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[AND]], i32 [[NOT]]
4125
+ ; CHECK-NEXT: ret i32 [[COND]]
4082
4126
;
4083
4127
entry:
4084
4128
%xor = xor i32 %y , %x
@@ -4111,9 +4155,13 @@ entry:
4111
4155
define i32 @src_xor_eq_C_and_xororC (i32 %x , i32 %y , i32 %c ) {
4112
4156
; CHECK-LABEL: @src_xor_eq_C_and_xororC(
4113
4157
; CHECK-NEXT: entry:
4114
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
4115
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[OR]], [[C:%.*]]
4116
- ; CHECK-NEXT: ret i32 [[XOR1]]
4158
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
4159
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[XOR]], [[C:%.*]]
4160
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4161
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
4162
+ ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[OR]], [[C]]
4163
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[AND]], i32 [[XOR1]]
4164
+ ; CHECK-NEXT: ret i32 [[COND]]
4117
4165
;
4118
4166
entry:
4119
4167
%xor = xor i32 %y , %x
@@ -4128,10 +4176,14 @@ entry:
4128
4176
define i32 @src_xor_eq_C_and_andornotC (i32 %x , i32 %y , i32 %c ) {
4129
4177
; CHECK-LABEL: @src_xor_eq_C_and_andornotC(
4130
4178
; CHECK-NEXT: entry:
4131
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[X:%.*]]
4132
- ; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[C:%.*]], -1
4179
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
4180
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[XOR]], [[C:%.*]]
4181
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4182
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
4183
+ ; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[C]], -1
4133
4184
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[OR]], [[NOT]]
4134
- ; CHECK-NEXT: ret i32 [[AND1]]
4185
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[AND]], i32 [[AND1]]
4186
+ ; CHECK-NEXT: ret i32 [[COND]]
4135
4187
;
4136
4188
entry:
4137
4189
%xor = xor i32 %y , %x
@@ -4147,9 +4199,13 @@ entry:
4147
4199
define i32 @src_xor_eq_C_or_xorandC (i32 %x , i32 %y , i32 %c ) {
4148
4200
; CHECK-LABEL: @src_xor_eq_C_or_xorandC(
4149
4201
; CHECK-NEXT: entry:
4150
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
4151
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[AND]], [[C:%.*]]
4152
- ; CHECK-NEXT: ret i32 [[XOR1]]
4202
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
4203
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[XOR]], [[C:%.*]]
4204
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
4205
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4206
+ ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[AND]], [[C]]
4207
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[OR]], i32 [[XOR1]]
4208
+ ; CHECK-NEXT: ret i32 [[COND]]
4153
4209
;
4154
4210
entry:
4155
4211
%xor = xor i32 %y , %x
@@ -4164,9 +4220,13 @@ entry:
4164
4220
define i32 @src_xor_eq_C_or_orandC (i32 %x , i32 %y , i32 %c ) {
4165
4221
; CHECK-LABEL: @src_xor_eq_C_or_orandC(
4166
4222
; CHECK-NEXT: entry:
4167
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
4168
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[AND]], [[C:%.*]]
4169
- ; CHECK-NEXT: ret i32 [[OR1]]
4223
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
4224
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[XOR]], [[C:%.*]]
4225
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y]], [[X]]
4226
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[Y]], [[X]]
4227
+ ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[AND]], [[C]]
4228
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[OR]], i32 [[OR1]]
4229
+ ; CHECK-NEXT: ret i32 [[COND]]
4170
4230
;
4171
4231
entry:
4172
4232
%xor = xor i32 %y , %x
0 commit comments