@@ -50,15 +50,13 @@ define i32 @load_i32_by_i8_big_endian(ptr %arg) {
5050; ptr p; // p is 4 byte aligned
5151; (i32) p[0] | ((i32) p[1] << 8) | ((i32) p[2] << 16) | ((i32) p[3] << 24)
5252define i32 @load_i32_by_i8_bswap (ptr %arg ) {
53- ; BSWAP is not supported by 32 bit target
5453; CHECK-LABEL: load_i32_by_i8_bswap:
5554; CHECK: @ %bb.0:
56- ; CHECK-NEXT: mov r1, #255
5755; 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
56+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
57+ ; CHECK-NEXT: bic r1, r1, #16711680
58+ ; CHECK-NEXT: lsr r1 , r1, #8
59+ ; CHECK-NEXT: eor r0, r1, r0 , ror #8
6260; CHECK-NEXT: mov pc, lr
6361;
6462; CHECK-ARMv6-LABEL: load_i32_by_i8_bswap:
@@ -221,16 +219,16 @@ define i32 @load_i32_by_i16_i8(ptr %arg) {
221219define i64 @load_i64_by_i8_bswap (ptr %arg ) {
222220; CHECK-LABEL: load_i64_by_i8_bswap:
223221; CHECK: @ %bb.0:
224- ; CHECK-NEXT: mov r2, #255
225222; CHECK-NEXT: ldr r1, [r0]
226223; 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
224+ ; CHECK-NEXT: eor r2, r0, r0, ror #16
225+ ; CHECK-NEXT: bic r2, r2, #16711680
226+ ; CHECK-NEXT: lsr r2, r2, #8
227+ ; CHECK-NEXT: eor r0, r2, r0, ror #8
228+ ; CHECK-NEXT: eor r2, r1, r1, ror #16
229+ ; CHECK-NEXT: bic r2, r2, #16711680
230+ ; CHECK-NEXT: lsr r2, r2, #8
231+ ; CHECK-NEXT: eor r1, r2, r1, ror #8
234232; CHECK-NEXT: mov pc, lr
235233;
236234; CHECK-ARMv6-LABEL: load_i64_by_i8_bswap:
@@ -370,12 +368,11 @@ define i64 @load_i64_by_i8(ptr %arg) {
370368define i32 @load_i32_by_i8_nonzero_offset (ptr %arg ) {
371369; CHECK-LABEL: load_i32_by_i8_nonzero_offset:
372370; CHECK: @ %bb.0:
373- ; CHECK-NEXT: mov r1, #255
374371; 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
372+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
373+ ; CHECK-NEXT: bic r1, r1, #16711680
374+ ; CHECK-NEXT: lsr r1 , r1, #8
375+ ; CHECK-NEXT: eor r0, r1, r0 , ror #8
379376; CHECK-NEXT: mov pc, lr
380377;
381378; CHECK-ARMv6-LABEL: load_i32_by_i8_nonzero_offset:
@@ -425,12 +422,11 @@ define i32 @load_i32_by_i8_nonzero_offset(ptr %arg) {
425422define i32 @load_i32_by_i8_neg_offset (ptr %arg ) {
426423; CHECK-LABEL: load_i32_by_i8_neg_offset:
427424; CHECK: @ %bb.0:
428- ; CHECK-NEXT: mov r1, #255
429425; 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
426+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
427+ ; CHECK-NEXT: bic r1, r1, #16711680
428+ ; CHECK-NEXT: lsr r1 , r1, #8
429+ ; CHECK-NEXT: eor r0, r1, r0 , ror #8
434430; CHECK-NEXT: mov pc, lr
435431;
436432; CHECK-ARMv6-LABEL: load_i32_by_i8_neg_offset:
@@ -576,12 +572,11 @@ declare i16 @llvm.bswap.i16(i16)
576572define i32 @load_i32_by_bswap_i16 (ptr %arg ) {
577573; CHECK-LABEL: load_i32_by_bswap_i16:
578574; CHECK: @ %bb.0:
579- ; CHECK-NEXT: mov r1, #255
580575; 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
576+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
577+ ; CHECK-NEXT: bic r1, r1, #16711680
578+ ; CHECK-NEXT: lsr r1 , r1, #8
579+ ; CHECK-NEXT: eor r0, r1, r0 , ror #8
585580; CHECK-NEXT: mov pc, lr
586581;
587582; CHECK-ARMv6-LABEL: load_i32_by_bswap_i16:
@@ -654,12 +649,11 @@ define i32 @load_i32_by_i8_base_offset_index(ptr %arg, i32 %i) {
654649; CHECK-LABEL: load_i32_by_i8_base_offset_index:
655650; CHECK: @ %bb.0:
656651; CHECK-NEXT: add r0, r0, r1
657- ; CHECK-NEXT: mov r1, #255
658- ; CHECK-NEXT: orr r1, r1, #16711680
659652; 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
653+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
654+ ; CHECK-NEXT: bic r1, r1, #16711680
655+ ; CHECK-NEXT: lsr r1, r1, #8
656+ ; CHECK-NEXT: eor r0, r1, r0, ror #8
663657; CHECK-NEXT: mov pc, lr
664658;
665659; CHECK-ARMv6-LABEL: load_i32_by_i8_base_offset_index:
@@ -718,12 +712,11 @@ define i32 @load_i32_by_i8_base_offset_index_2(ptr %arg, i32 %i) {
718712; CHECK-LABEL: load_i32_by_i8_base_offset_index_2:
719713; CHECK: @ %bb.0:
720714; CHECK-NEXT: add r0, r1, r0
721- ; CHECK-NEXT: mov r1, #255
722- ; CHECK-NEXT: orr r1, r1, #16711680
723715; 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
716+ ; CHECK-NEXT: eor r1, r0, r0, ror #16
717+ ; CHECK-NEXT: bic r1, r1, #16711680
718+ ; CHECK-NEXT: lsr r1, r1, #8
719+ ; CHECK-NEXT: eor r0, r1, r0, ror #8
727720; CHECK-NEXT: mov pc, lr
728721;
729722; CHECK-ARMv6-LABEL: load_i32_by_i8_base_offset_index_2:
0 commit comments