mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-16 00:17:32 +00:00
Add icmp and conditional branches in the C API echo test.
Summary: Improving coverage. Depends on D16912 . Reviewers: bogner, chandlerc, echristo, dblaikie, joker.eph, Wallbraker Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D16937 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260321 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c4f6eb8e3b
commit
ef35fd8a09
@ -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
|
||||
}
|
||||
|
@ -216,10 +216,21 @@ struct FunCloner {
|
||||
break;
|
||||
}
|
||||
case LLVMBr: {
|
||||
LLVMBasicBlockRef SrcBB = LLVMValueAsBasicBlock(LLVMGetOperand(Src, 0));
|
||||
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:
|
||||
case LLVMIndirectBr:
|
||||
case LLVMInvoke:
|
||||
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user