1; RUN: llc -mtriple=arm-eabi -pre-RA-sched=source -mattr=+strict-align %s -o - \ 2; RUN: | FileCheck %s -check-prefix=EXPANDED 3 4; RUN: llc -mtriple=armv6-apple-darwin -mcpu=cortex-a8 -mattr=-neon,+strict-align -pre-RA-sched=source %s -o - \ 5; RUN: | FileCheck %s -check-prefix=EXPANDED 6 7; RUN: llc -mtriple=armv6-apple-darwin -mcpu=cortex-a8 %s -o - \ 8; RUN: | FileCheck %s -check-prefix=UNALIGNED 9 10; rdar://7113725 11; rdar://12091029 12 13define void @t(ptr nocapture %a, ptr nocapture %b) nounwind { 14entry: 15; EXPANDED-LABEL: t: 16; EXPANDED-DAG: ldrb [[R2:r[0-9]+]] 17; EXPANDED-DAG: ldrb [[R3:r[0-9]+]] 18; EXPANDED-DAG: ldrb [[R12:r[0-9]+]] 19; EXPANDED-DAG: ldrb [[R1:r[0-9]+]] 20; EXPANDED-DAG: strb [[R1]] 21; EXPANDED-DAG: strb [[R12]] 22; EXPANDED-DAG: strb [[R3]] 23; EXPANDED-DAG: strb [[R2]] 24 25; UNALIGNED-LABEL: t: 26; UNALIGNED: ldr r1 27; UNALIGNED: str r1 28 29 %tmp.i = load i32, ptr %b, align 1 ; <i32> [#uses=1] 30 store i32 %tmp.i, ptr %a, align 1 31 ret void 32} 33 34define void @hword(ptr %a, ptr %b) nounwind { 35entry: 36; EXPANDED-LABEL: hword: 37; EXPANDED-NOT: vld1 38; EXPANDED: ldrh 39; EXPANDED-NOT: str1 40; EXPANDED: strh 41 42; UNALIGNED-LABEL: hword: 43; UNALIGNED: vld1.16 44; UNALIGNED: vst1.16 45 %tmp = load double, ptr %a, align 2 46 store double %tmp, ptr %b, align 2 47 ret void 48} 49 50define void @byte(ptr %a, ptr %b) nounwind { 51entry: 52; EXPANDED-LABEL: byte: 53; EXPANDED-NOT: vld1 54; EXPANDED: ldrb 55; EXPANDED-NOT: str1 56; EXPANDED: strb 57 58; UNALIGNED-LABEL: byte: 59; UNALIGNED: vld1.8 60; UNALIGNED: vst1.8 61 %tmp = load double, ptr %a, align 1 62 store double %tmp, ptr %b, align 1 63 ret void 64} 65 66define void @byte_word_ops(ptr %a, ptr %b) nounwind { 67entry: 68; EXPANDED-LABEL: byte_word_ops: 69; EXPANDED: ldrb 70; EXPANDED: strb 71 72; UNALIGNED-LABEL: byte_word_ops: 73; UNALIGNED-NOT: ldrb 74; UNALIGNED: ldr 75; UNALIGNED-NOT: strb 76; UNALIGNED: str 77 %tmp = load i32, ptr %a, align 1 78 store i32 %tmp, ptr %b, align 1 79 ret void 80} 81