mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-25 04:51:38 +00:00
There was a switch fall-through in the parser for textual LLVM that caused
bogus comparison operands to default to eq/oeq. Fix that, fix a couple of tests that accidentally passed and test for bogus comparison opeartors explicitly. llvm-svn: 171733
This commit is contained in:
parent
8d1832e091
commit
a11edf0ce3
@ -3120,7 +3120,7 @@ int LLParser::ParseInstruction(Instruction *&Inst, BasicBlock *BB,
|
|||||||
bool LLParser::ParseCmpPredicate(unsigned &P, unsigned Opc) {
|
bool LLParser::ParseCmpPredicate(unsigned &P, unsigned Opc) {
|
||||||
if (Opc == Instruction::FCmp) {
|
if (Opc == Instruction::FCmp) {
|
||||||
switch (Lex.getKind()) {
|
switch (Lex.getKind()) {
|
||||||
default: TokError("expected fcmp predicate (e.g. 'oeq')");
|
default: return TokError("expected fcmp predicate (e.g. 'oeq')");
|
||||||
case lltok::kw_oeq: P = CmpInst::FCMP_OEQ; break;
|
case lltok::kw_oeq: P = CmpInst::FCMP_OEQ; break;
|
||||||
case lltok::kw_one: P = CmpInst::FCMP_ONE; break;
|
case lltok::kw_one: P = CmpInst::FCMP_ONE; break;
|
||||||
case lltok::kw_olt: P = CmpInst::FCMP_OLT; break;
|
case lltok::kw_olt: P = CmpInst::FCMP_OLT; break;
|
||||||
@ -3140,7 +3140,7 @@ bool LLParser::ParseCmpPredicate(unsigned &P, unsigned Opc) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (Lex.getKind()) {
|
switch (Lex.getKind()) {
|
||||||
default: TokError("expected icmp predicate (e.g. 'eq')");
|
default: return TokError("expected icmp predicate (e.g. 'eq')");
|
||||||
case lltok::kw_eq: P = CmpInst::ICMP_EQ; break;
|
case lltok::kw_eq: P = CmpInst::ICMP_EQ; break;
|
||||||
case lltok::kw_ne: P = CmpInst::ICMP_NE; break;
|
case lltok::kw_ne: P = CmpInst::ICMP_NE; break;
|
||||||
case lltok::kw_slt: P = CmpInst::ICMP_SLT; break;
|
case lltok::kw_slt: P = CmpInst::ICMP_SLT; break;
|
||||||
|
@ -4,5 +4,5 @@
|
|||||||
@G1 = global i8 zeroinitializer
|
@G1 = global i8 zeroinitializer
|
||||||
@g = constant <2 x i8*> getelementptr (<2 x i8*> <i8* @G1, i8* @G1>, <2 x i32> <i32 0, i32 0>)
|
@g = constant <2 x i8*> getelementptr (<2 x i8*> <i8* @G1, i8* @G1>, <2 x i32> <i32 0, i32 0>)
|
||||||
|
|
||||||
@t = constant <2 x i1> icmp ((<2 x i32> ptrtoint (<2 x i8*> zeroinitializer to <2 x i32>), <2 x i32> zeroinitializer )
|
@t = constant <2 x i1> icmp eq (<2 x i32> ptrtoint (<2 x i8*> zeroinitializer to <2 x i32>), <2 x i32> zeroinitializer )
|
||||||
|
|
||||||
|
@ -19,9 +19,9 @@ define void @test2(float %A, float %B, i1* %PA, i1* %PB) {
|
|||||||
; CHECK-NEXT: store
|
; CHECK-NEXT: store
|
||||||
; CHECK-NEXT: store
|
; CHECK-NEXT: store
|
||||||
; CHECK-NEXT: ret
|
; CHECK-NEXT: ret
|
||||||
%C = fcmp eq float %A, %B
|
%C = fcmp oeq float %A, %B
|
||||||
store i1 %C, i1* %PA
|
store i1 %C, i1* %PA
|
||||||
%D = fcmp eq float %B, %A
|
%D = fcmp oeq float %B, %A
|
||||||
store i1 %D, i1* %PB
|
store i1 %D, i1* %PB
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt -loop-idiom < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -S | FileCheck %s
|
; RUN: opt -loop-idiom < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -S | FileCheck %s
|
||||||
|
booom
|
||||||
;To recognize this pattern:
|
;To recognize this pattern:
|
||||||
;int popcount(unsigned long long a) {
|
;int popcount(unsigned long long a) {
|
||||||
; int c = 0;
|
; int c = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user