================ @@ -0,0 +1,95 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -O=3 -mtriple=avr-none -mcpu=attiny85 -verify-machineinstrs | FileCheck %s + +declare dso_local void @foo(i16 noundef) addrspace(1) +@ci = dso_local global [30 x i16] zeroinitializer, align 1 +define void @loopreduce() { +; CHECK-LABEL: loopreduce: +; CHECK: ; %bb.0: ; %entry +; CHECK-NEXT: push r14 +; CHECK-NEXT: push r15 +; CHECK-NEXT: push r16 +; CHECK-NEXT: push r17 +; CHECK-NEXT: ldi r26, lo8(ci) +; CHECK-NEXT: ldi r27, hi8(ci) +; CHECK-NEXT: ldi r16, lo8(ci+60) +; CHECK-NEXT: ldi r17, hi8(ci+60) +; CHECK-NEXT: .LBB0_1: ; %for.body +; CHECK-NEXT: ; =>This Inner Loop Header: Depth=1 +; CHECK-NEXT: ld r24, X+ +; CHECK-NEXT: ld r25, X+ +; CHECK-NEXT: movw r14, r26 +; CHECK-NEXT: rcall foo +; CHECK-NEXT: movw r26, r14 +; CHECK-NEXT: cp r26, r16 +; CHECK-NEXT: cpc r27, r17 +; CHECK-NEXT: brne .LBB0_1 +; CHECK-NEXT: ; %bb.2: ; %for.cond.cleanup +; CHECK-NEXT: pop r17 +; CHECK-NEXT: pop r16 +; CHECK-NEXT: pop r15 +; CHECK-NEXT: pop r14 +; CHECK-NEXT: ret +entry: + br label %for.body +for.body: ; preds = %entry, %for.body + %i.03 = phi i16 [ 0, %entry ], [ %inc, %for.body ] + %arrayidx = getelementptr inbounds nuw [30 x i16], ptr @ci, i16 0, i16 %i.03 + %0 = load i16, ptr %arrayidx, align 1 + tail call addrspace(1) void @foo(i16 noundef %0) + %inc = add nuw nsw i16 %i.03, 1 + %exitcond.not = icmp eq i16 %inc, 30 + br i1 %exitcond.not, label %for.cond.cleanup, label %for.body +; Exit blocks +for.cond.cleanup: ; preds = %for.body + ret void +} + +define void @indvar() { ---------------- tomtor wrote:
Source: ``` void induction() { for (int i = 7; i*i < 1000; ++i) foo(1); } ``` clang resul is optimized: ``` 7e: ef 92 push r14 80: ff 92 push r15 82: 0f 93 push r16 84: 1f 93 push r17 86: 89 e1 ldi r24, 0x19 ; 25 88: 90 e0 ldi r25, 0x00 ; 0 8a: 01 e0 ldi r16, 0x01 ; 1 8c: 10 e0 ldi r17, 0x00 ; 0 8e: 7c 01 movw r14, r24 90: c8 01 movw r24, r16 92: 2b d0 rcall .+86 ; 0xea <foo> 94: c7 01 movw r24, r14 96: 01 97 sbiw r24, 0x01 ; 1 98: 81 15 cp r24, r1 9a: 91 05 cpc r25, r1 9c: c1 f7 brne .-16 ; 0x8e <.Lname24+0x1> 9e: 1f 91 pop r17 a0: 0f 91 pop r16 a2: ff 90 pop r15 a4: ef 90 pop r14 a6: 08 95 ret ``` but llc output is not??? How is this possible? loopreduce() in this same file is ok. If we do not solve this i will remove this part and only keep the loopreduce() part. https://github.com/llvm/llvm-project/pull/152028 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits