1; RUN: llc -mtriple=hexagon-unknown-elf < %s | FileCheck %s 2 3; CHECK-LABEL: ldf 4; CHECK: memw(r{{[0-9]+}}++#4) 5; CHECK: memw(r{{[0-9]+}}++#4) 6define float @ldf(ptr nocapture readonly %x, ptr nocapture readonly %y) local_unnamed_addr #0 { 7entry: 8 br label %for.body 9 10for.body: 11 %arrayidx.phi = phi ptr [ %x, %entry ], [ %arrayidx.inc, %for.body ] 12 %arrayidx1.phi = phi ptr [ %y, %entry ], [ %arrayidx1.inc, %for.body ] 13 %i.09 = phi i32 [ 0, %entry ], [ %inc, %for.body ] 14 %acc.08 = phi float [ 0.000000e+00, %entry ], [ %add, %for.body ] 15 %0 = load float, ptr %arrayidx.phi, align 4 16 %1 = load float, ptr %arrayidx1.phi, align 4 17 %mul = fmul contract float %0, %1 18 %add = fadd contract float %acc.08, %mul 19 %inc = add nuw nsw i32 %i.09, 1 20 %exitcond = icmp eq i32 %inc, 1024 21 %arrayidx.inc = getelementptr float, ptr %arrayidx.phi, i32 1 22 %arrayidx1.inc = getelementptr float, ptr %arrayidx1.phi, i32 1 23 br i1 %exitcond, label %for.end, label %for.body 24 25for.end: 26 ret float %add 27} 28 29; CHECK-LABEL: ldd 30; CHECK: memd(r{{[0-9]+}}++#8) 31; CHECK: memd(r{{[0-9]+}}++#8) 32define double @ldd(ptr nocapture readonly %x, ptr nocapture readonly %y) local_unnamed_addr #0 { 33entry: 34 br label %for.body 35 36for.body: 37 %arrayidx.phi = phi ptr [ %x, %entry ], [ %arrayidx.inc, %for.body ] 38 %arrayidx1.phi = phi ptr [ %y, %entry ], [ %arrayidx1.inc, %for.body ] 39 %i.09 = phi i32 [ 0, %entry ], [ %inc, %for.body ] 40 %acc.08 = phi double [ 0.000000e+00, %entry ], [ %add, %for.body ] 41 %0 = load double, ptr %arrayidx.phi, align 8 42 %1 = load double, ptr %arrayidx1.phi, align 8 43 %mul = fmul contract double %0, %1 44 %add = fadd contract double %acc.08, %mul 45 %inc = add nuw nsw i32 %i.09, 1 46 %exitcond = icmp eq i32 %inc, 1024 47 %arrayidx.inc = getelementptr double, ptr %arrayidx.phi, i32 1 48 %arrayidx1.inc = getelementptr double, ptr %arrayidx1.phi, i32 1 49 br i1 %exitcond, label %for.end, label %for.body 50 51for.end: 52 ret double %add 53} 54 55; CHECK-LABEL: stf 56; CHECK: memw(r{{[0-9]+}}++#4) 57define ptr @stf(ptr returned %p) local_unnamed_addr #0 { 58entry: 59 br label %for.body 60 61for.body: 62 %arrayidx.phi = phi ptr [ %arrayidx.inc, %for.body ], [ %p, %entry ] 63 %call = tail call float @foof() #2 64 store float %call, ptr %arrayidx.phi, align 8 65 %arrayidx.inc = getelementptr float, ptr %arrayidx.phi, i32 1 66 br label %for.body 67} 68 69declare float @foof() local_unnamed_addr #1 70 71; CHECK-LABEL: std 72; CHECK: memd(r{{[0-9]+}}++#8) 73define ptr @std(ptr returned %p) local_unnamed_addr #0 { 74entry: 75 br label %for.body 76 77for.body: 78 %arrayidx.phi = phi ptr [ %arrayidx.inc, %for.body ], [ %p, %entry ] 79 %call = tail call double @food() #2 80 store double %call, ptr %arrayidx.phi, align 8 81 %arrayidx.inc = getelementptr double, ptr %arrayidx.phi, i32 1 82 br label %for.body 83} 84 85declare double @food() local_unnamed_addr #1 86 87