================
@@ -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

Reply via email to