Skip to content

Commit

Permalink
Add icmp and conditional branches in the C API echo test.
Browse files Browse the repository at this point in the history
Summary:
Improving coverage.

Depends on D16912 .

Reviewers: bogner, chandlerc, echristo, dblaikie, joker.eph, Wallbraker

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D16937

llvm-svn: 260321
  • Loading branch information
deadalnix committed Feb 9, 2016
1 parent d3bd97a commit e7e6217
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 4 deletions.
34 changes: 32 additions & 2 deletions llvm/test/Bindings/llvm-c/echo.ll
Expand Up @@ -43,10 +43,40 @@ define i32 @call() {
ret i32 %1
}

define i32 @bborder(i32 %a, i32 %b) {
define i32 @cond(i32 %a, i32 %b) {
br label %br
unreachable:
unreachable
br:
br label %unreachable
%1 = icmp eq i32 %a, %b
br i1 %1, label %next0, label %unreachable
next0:
%2 = icmp ne i32 %a, %b
br i1 %2, label %next1, label %unreachable
next1:
%3 = icmp ugt i32 %a, %b
br i1 %3, label %next2, label %unreachable
next2:
%4 = icmp uge i32 %a, %b
br i1 %4, label %next3, label %unreachable
next3:
%5 = icmp ult i32 %a, %b
br i1 %5, label %next4, label %unreachable
next4:
%6 = icmp ule i32 %a, %b
br i1 %6, label %next5, label %unreachable
next5:
%7 = icmp sgt i32 %a, %b
br i1 %7, label %next6, label %unreachable
next6:
%8 = icmp sge i32 %a, %b
br i1 %8, label %next7, label %unreachable
next7:
%9 = icmp slt i32 %a, %b
br i1 %9, label %next8, label %unreachable
next8:
%10 = icmp sle i32 %a, %b
br i1 %10, label %next9, label %unreachable
next9:
ret i32 0
}
22 changes: 20 additions & 2 deletions llvm/tools/llvm-c-test/echo.cpp
Expand Up @@ -216,8 +216,19 @@ struct FunCloner {
break;
}
case LLVMBr: {
LLVMBasicBlockRef SrcBB = LLVMValueAsBasicBlock(LLVMGetOperand(Src, 0));
Dst = LLVMBuildBr(Builder, DeclareBB(SrcBB));
if (!LLVMIsConditional(Src)) {
LLVMValueRef SrcOp = LLVMGetOperand(Src, 0);
LLVMBasicBlockRef SrcBB = LLVMValueAsBasicBlock(SrcOp);
Dst = LLVMBuildBr(Builder, DeclareBB(SrcBB));
break;
}

LLVMValueRef Cond = LLVMGetCondition(Src);
LLVMValueRef Else = LLVMGetOperand(Src, 1);
LLVMBasicBlockRef ElseBB = DeclareBB(LLVMValueAsBasicBlock(Else));
LLVMValueRef Then = LLVMGetOperand(Src, 2);
LLVMBasicBlockRef ThenBB = DeclareBB(LLVMValueAsBasicBlock(Then));
Dst = LLVMBuildCondBr(Builder, Cond, ThenBB, ElseBB);
break;
}
case LLVMSwitch:
Expand Down Expand Up @@ -311,6 +322,13 @@ struct FunCloner {
Dst = LLVMBuildAlloca(Builder, Ty, Name);
break;
}
case LLVMICmp: {
LLVMIntPredicate Pred = LLVMGetICmpPredicate(Src);
LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0), Builder);
LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1), Builder);
Dst = LLVMBuildICmp(Builder, Pred, LHS, RHS, Name);
break;
}
case LLVMCall: {
int ArgCount = LLVMGetNumOperands(Src) - 1;
SmallVector<LLVMValueRef, 8> Args;
Expand Down

0 comments on commit e7e6217

Please sign in to comment.