File tree Expand file tree Collapse file tree 2 files changed +23
-0
lines changed Expand file tree Collapse file tree 2 files changed +23
-0
lines changed Original file line number Diff line number Diff line change @@ -1896,6 +1896,7 @@ def : PatGprGpr<shiftopw<riscv_sraw>, SRAW>;
1896
1896
// Select W instructions if only the lower 32 bits of the result are used.
1897
1897
def : PatGprGpr<binop_allwusers<add>, ADDW>;
1898
1898
def : PatGprSimm12<binop_allwusers<add>, ADDIW>;
1899
+ def : PatGprImm<binop_allwusers<add>, ADDIW, u32simm12>;
1899
1900
def : PatGprGpr<binop_allwusers<sub>, SUBW>;
1900
1901
def : PatGprImm<binop_allwusers<shl>, SLLIW, uimm5>;
1901
1902
Original file line number Diff line number Diff line change @@ -3217,3 +3217,25 @@ entry:
3217
3217
%z = and i64 %y , -8192
3218
3218
ret i64 %z
3219
3219
}
3220
+
3221
+ define i64 @add_u32simm32_zextw (i64 %x ) nounwind {
3222
+ ; RV64I-LABEL: add_u32simm32_zextw:
3223
+ ; RV64I: # %bb.0: # %entry
3224
+ ; RV64I-NEXT: li a1, 1
3225
+ ; RV64I-NEXT: slli a1, a1, 32
3226
+ ; RV64I-NEXT: addi a1, a1, -2
3227
+ ; RV64I-NEXT: add a0, a0, a1
3228
+ ; RV64I-NEXT: addi a1, a1, 1
3229
+ ; RV64I-NEXT: and a0, a0, a1
3230
+ ; RV64I-NEXT: ret
3231
+ ;
3232
+ ; RV64ZBA-LABEL: add_u32simm32_zextw:
3233
+ ; RV64ZBA: # %bb.0: # %entry
3234
+ ; RV64ZBA-NEXT: addi a0, a0, -2
3235
+ ; RV64ZBA-NEXT: zext.w a0, a0
3236
+ ; RV64ZBA-NEXT: ret
3237
+ entry:
3238
+ %add = add i64 %x , 4294967294
3239
+ %and = and i64 %add , 4294967295
3240
+ ret i64 %and
3241
+ }
You can’t perform that action at this time.
0 commit comments