@@ -53,12 +53,11 @@ define i32 @load_i32_by_i8_bswap(ptr %arg) {
5353; BSWAP is not supported by 32 bit target
5454; CHECK-LABEL: load_i32_by_i8_bswap:
5555; CHECK: @ %bb.0:
56- ; CHECK-NEXT: mov r1, #255
5756; CHECK-NEXT: ldr r0, [r0]
58- ; CHECK-NEXT: orr r1, r1, #16711680
59- ; CHECK-NEXT: and r2, r0, r1
60- ; CHECK-NEXT: and r0 , r1, r0, ror #24
61- ; CHECK-NEXT: orr r0, r0, r2 , ror #8
57+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
58+ ; CHECK-NEXT: bic r1, r1, #16711680
59+ ; CHECK-NEXT: lsr r1 , r1, #8
60+ ; CHECK-NEXT: eor r0, r1, r0 , ror #8
6261; CHECK-NEXT: mov pc, lr
6362;
6463; CHECK-ARMv6-LABEL: load_i32_by_i8_bswap:
@@ -221,16 +220,16 @@ define i32 @load_i32_by_i16_i8(ptr %arg) {
221220define i64 @load_i64_by_i8_bswap (ptr %arg ) {
222221; CHECK-LABEL: load_i64_by_i8_bswap:
223222; CHECK: @ %bb.0:
224- ; CHECK-NEXT: mov r2, #255
225223; CHECK-NEXT: ldr r1, [r0]
226224; CHECK-NEXT: ldr r0, [r0, #4]
227- ; CHECK-NEXT: orr r2, r2, #16711680
228- ; CHECK-NEXT: and r3, r0, r2
229- ; CHECK-NEXT: and r0, r2, r0, ror #24
230- ; CHECK-NEXT: orr r0, r0, r3, ror #8
231- ; CHECK-NEXT: and r3, r1, r2
232- ; CHECK-NEXT: and r1, r2, r1, ror #24
233- ; CHECK-NEXT: orr r1, r1, r3, ror #8
225+ ; CHECK-NEXT: eor r2, r0, r0, ror #16
226+ ; CHECK-NEXT: bic r2, r2, #16711680
227+ ; CHECK-NEXT: lsr r2, r2, #8
228+ ; CHECK-NEXT: eor r0, r2, r0, ror #8
229+ ; CHECK-NEXT: eor r2, r1, r1, ror #16
230+ ; CHECK-NEXT: bic r2, r2, #16711680
231+ ; CHECK-NEXT: lsr r2, r2, #8
232+ ; CHECK-NEXT: eor r1, r2, r1, ror #8
234233; CHECK-NEXT: mov pc, lr
235234;
236235; CHECK-ARMv6-LABEL: load_i64_by_i8_bswap:
@@ -370,12 +369,11 @@ define i64 @load_i64_by_i8(ptr %arg) {
370369define i32 @load_i32_by_i8_nonzero_offset (ptr %arg ) {
371370; CHECK-LABEL: load_i32_by_i8_nonzero_offset:
372371; CHECK: @ %bb.0:
373- ; CHECK-NEXT: mov r1, #255
374372; CHECK-NEXT: ldr r0, [r0, #1]
375- ; CHECK-NEXT: orr r1, r1, #16711680
376- ; CHECK-NEXT: and r2, r0, r1
377- ; CHECK-NEXT: and r0 , r1, r0, ror #24
378- ; CHECK-NEXT: orr r0, r0, r2 , ror #8
373+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
374+ ; CHECK-NEXT: bic r1, r1, #16711680
375+ ; CHECK-NEXT: lsr r1 , r1, #8
376+ ; CHECK-NEXT: eor r0, r1, r0 , ror #8
379377; CHECK-NEXT: mov pc, lr
380378;
381379; CHECK-ARMv6-LABEL: load_i32_by_i8_nonzero_offset:
@@ -425,12 +423,11 @@ define i32 @load_i32_by_i8_nonzero_offset(ptr %arg) {
425423define i32 @load_i32_by_i8_neg_offset (ptr %arg ) {
426424; CHECK-LABEL: load_i32_by_i8_neg_offset:
427425; CHECK: @ %bb.0:
428- ; CHECK-NEXT: mov r1, #255
429426; CHECK-NEXT: ldr r0, [r0, #-4]
430- ; CHECK-NEXT: orr r1, r1, #16711680
431- ; CHECK-NEXT: and r2, r0, r1
432- ; CHECK-NEXT: and r0 , r1, r0, ror #24
433- ; CHECK-NEXT: orr r0, r0, r2 , ror #8
427+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
428+ ; CHECK-NEXT: bic r1, r1, #16711680
429+ ; CHECK-NEXT: lsr r1 , r1, #8
430+ ; CHECK-NEXT: eor r0, r1, r0 , ror #8
434431; CHECK-NEXT: mov pc, lr
435432;
436433; CHECK-ARMv6-LABEL: load_i32_by_i8_neg_offset:
@@ -576,12 +573,11 @@ declare i16 @llvm.bswap.i16(i16)
576573define i32 @load_i32_by_bswap_i16 (ptr %arg ) {
577574; CHECK-LABEL: load_i32_by_bswap_i16:
578575; CHECK: @ %bb.0:
579- ; CHECK-NEXT: mov r1, #255
580576; CHECK-NEXT: ldr r0, [r0]
581- ; CHECK-NEXT: orr r1, r1, #16711680
582- ; CHECK-NEXT: and r2, r0, r1
583- ; CHECK-NEXT: and r0 , r1, r0, ror #24
584- ; CHECK-NEXT: orr r0, r0, r2 , ror #8
577+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
578+ ; CHECK-NEXT: bic r1, r1, #16711680
579+ ; CHECK-NEXT: lsr r1 , r1, #8
580+ ; CHECK-NEXT: eor r0, r1, r0 , ror #8
585581; CHECK-NEXT: mov pc, lr
586582;
587583; CHECK-ARMv6-LABEL: load_i32_by_bswap_i16:
@@ -654,12 +650,11 @@ define i32 @load_i32_by_i8_base_offset_index(ptr %arg, i32 %i) {
654650; CHECK-LABEL: load_i32_by_i8_base_offset_index:
655651; CHECK: @ %bb.0:
656652; CHECK-NEXT: add r0, r0, r1
657- ; CHECK-NEXT: mov r1, #255
658- ; CHECK-NEXT: orr r1, r1, #16711680
659653; CHECK-NEXT: ldr r0, [r0, #12]
660- ; CHECK-NEXT: and r2, r0, r1
661- ; CHECK-NEXT: and r0, r1, r0, ror #24
662- ; CHECK-NEXT: orr r0, r0, r2, ror #8
654+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
655+ ; CHECK-NEXT: bic r1, r1, #16711680
656+ ; CHECK-NEXT: lsr r1, r1, #8
657+ ; CHECK-NEXT: eor r0, r1, r0, ror #8
663658; CHECK-NEXT: mov pc, lr
664659;
665660; CHECK-ARMv6-LABEL: load_i32_by_i8_base_offset_index:
@@ -718,12 +713,11 @@ define i32 @load_i32_by_i8_base_offset_index_2(ptr %arg, i32 %i) {
718713; CHECK-LABEL: load_i32_by_i8_base_offset_index_2:
719714; CHECK: @ %bb.0:
720715; CHECK-NEXT: add r0, r1, r0
721- ; CHECK-NEXT: mov r1, #255
722- ; CHECK-NEXT: orr r1, r1, #16711680
723716; CHECK-NEXT: ldr r0, [r0, #13]
724- ; CHECK-NEXT: and r2, r0, r1
725- ; CHECK-NEXT: and r0, r1, r0, ror #24
726- ; CHECK-NEXT: orr r0, r0, r2, ror #8
717+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
718+ ; CHECK-NEXT: bic r1, r1, #16711680
719+ ; CHECK-NEXT: lsr r1, r1, #8
720+ ; CHECK-NEXT: eor r0, r1, r0, ror #8
727721; CHECK-NEXT: mov pc, lr
728722;
729723; CHECK-ARMv6-LABEL: load_i32_by_i8_base_offset_index_2:
0 commit comments