1; RUN: llc < %s -march=thumb -mattr=-thumb2 | not grep pld 2; RUN: llc < %s -march=thumb -mattr=+v7a | FileCheck %s -check-prefix=THUMB2 3; RUN: llc < %s -march=arm -mattr=+v7a,+mp | FileCheck %s -check-prefix=ARM-MP 4; rdar://8601536 5 6define void @t1(i8* %ptr) nounwind { 7entry: 8; ARM-MP: t1: 9; ARM-MP: pldw [r0] 10; ARM-MP: pld [r0] 11 12; THUMB2: t1: 13; THUMB2-NOT: pldw [r0] 14; THUMB2: pld [r0] 15 tail call void @llvm.prefetch( i8* %ptr, i32 1, i32 3 ) 16 tail call void @llvm.prefetch( i8* %ptr, i32 0, i32 3 ) 17 ret void 18} 19 20define void @t2(i8* %ptr) nounwind { 21entry: 22; ARM-MP: t2: 23; ARM-MP: pld [r0, #1023] 24 25; THUMB2: t2: 26; THUMB2: pld [r0, #1023] 27 %tmp = getelementptr i8* %ptr, i32 1023 28 tail call void @llvm.prefetch( i8* %tmp, i32 0, i32 3 ) 29 ret void 30} 31 32define void @t3(i32 %base, i32 %offset) nounwind { 33entry: 34; ARM-MP: t3: 35; ARM-MP: pld [r0, r1, lsr #2] 36 37; THUMB2: t3: 38; THUMB2: lsrs r1, r1, #2 39; THUMB2: pld [r0, r1] 40 %tmp1 = lshr i32 %offset, 2 41 %tmp2 = add i32 %base, %tmp1 42 %tmp3 = inttoptr i32 %tmp2 to i8* 43 tail call void @llvm.prefetch( i8* %tmp3, i32 0, i32 3 ) 44 ret void 45} 46 47define void @t4(i32 %base, i32 %offset) nounwind { 48entry: 49; ARM-MP: t4: 50; ARM-MP: pld [r0, r1, lsl #2] 51 52; THUMB2: t4: 53; THUMB2: pld [r0, r1, lsl #2] 54 %tmp1 = shl i32 %offset, 2 55 %tmp2 = add i32 %base, %tmp1 56 %tmp3 = inttoptr i32 %tmp2 to i8* 57 tail call void @llvm.prefetch( i8* %tmp3, i32 0, i32 3 ) 58 ret void 59} 60 61declare void @llvm.prefetch(i8*, i32, i32) nounwind 62