Index: tests_lit/llvm2ice_tests/simple-loop.ll |
diff --git a/tests_lit/llvm2ice_tests/simple-loop.ll b/tests_lit/llvm2ice_tests/simple-loop.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4460834a46ef237bf569038824db19ae1fb0bb15 |
--- /dev/null |
+++ b/tests_lit/llvm2ice_tests/simple-loop.ll |
@@ -0,0 +1,52 @@ |
+; RUIN: %llvm2ice -verbose inst %s | FileCheck %s |
+; RUIN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s |
+; RUN: %szdiff --llvm2ice=%llvm2ice %s | FileCheck --check-prefix=DUMP %s |
+ |
+define i32 @simple_loop(i32 %a, i32 %n) { |
+entry: |
+ %cmp4 = icmp sgt i32 %n, 0 |
+ br i1 %cmp4, label %for.body, label %for.end |
+ |
+for.body: |
+ %i.06 = phi i32 [ %inc, %for.body ], [ 0, %entry ] |
+ %sum.05 = phi i32 [ %add, %for.body ], [ 0, %entry ] |
+ %gep_array = mul i32 %i.06, 4 |
+ %gep = add i32 %a, %gep_array |
+ %gep.asptr = inttoptr i32 %gep to i32* |
+ %v0 = load i32* %gep.asptr, align 1 |
+ %add = add i32 %v0, %sum.05 |
+ %inc = add i32 %i.06, 1 |
+ %cmp = icmp slt i32 %inc, %n |
+ br i1 %cmp, label %for.body, label %for.end |
+ |
+for.end: |
+ %sum.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ] |
+ ret i32 %sum.0.lcssa |
+} |
+ |
+; Checks for verbose instruction output |
+ |
+; CHECK: br i1 %cmp4, label %for.body, label %for.end |
+; CHECK-NEXT: for.body |
+; CHECK: %i.06 = phi i32 [ %inc, %for.body ], [ 0, %entry ] |
+; CHECK-NEXT: %sum.05 = phi i32 [ %add, %for.body ], [ 0, %entry ] |
+ |
+; Checks for emitted assembly |
+ |
+; CHECK: .globl simple_loop |
+ |
+; CHECK: mov ecx, dword ptr [esp+{{[0-9]+}}] |
+; CHECK: cmp ecx, 0 |
+; CHECK-NEXT: jg {{.*}}for.body |
+; CHECK-NEXT: jmp {{.*}}for.end |
+ |
+; TODO: the mov from ebx to esi seems redundant here - so this may need to be |
+; modified later |
+ |
+; CHECK: add [[IREG:[a-z]+]], 1 |
+; CHECK-NEXT: mov [[ICMPREG:[a-z]+]], [[IREG]] |
+; CHECK: cmp [[ICMPREG]], ecx |
+; CHECK-NEXT: jl {{.*}}for.body |
+ |
+; ERRORS-NOT: ICE translation error |
+; DUMP-NOT: SZ |