@@ -1528,6 +1528,7 @@ define void @foo(i32 %arg, float %farg, double %darg, ptr %ptr) {
15281528 EXPECT_EQ (IntToPtr->getDestTy (), Tptr);
15291529
15301530 auto *SIToFP = cast<sandboxir::CastInst>(&*It++);
1531+ EXPECT_TRUE (isa<sandboxir::SIToFPInst>(SIToFP));
15311532 EXPECT_EQ (SIToFP->getOpcode (), sandboxir::Instruction::Opcode::SIToFP);
15321533 EXPECT_EQ (SIToFP->getSrcTy (), Ti32);
15331534 EXPECT_EQ (SIToFP->getDestTy (), Tfloat);
@@ -1619,6 +1620,75 @@ define void @foo(i32 %arg, float %farg, double %darg, ptr %ptr) {
16191620 }
16201621}
16211622
1623+ TEST_F (SandboxIRTest, SIToFPInst) {
1624+ parseIR (C, R"IR(
1625+ define void @foo(i32 %arg) {
1626+ %sitofp = sitofp i32 %arg to float
1627+ ret void
1628+ }
1629+ )IR" );
1630+ Function &LLVMF = *M->getFunction (" foo" );
1631+ sandboxir::Context Ctx (C);
1632+ sandboxir::Function *F = Ctx.createFunction (&LLVMF);
1633+ unsigned ArgIdx = 0 ;
1634+ auto *Arg = F->getArg (ArgIdx++);
1635+ auto *BB = &*F->begin ();
1636+ auto It = BB->begin ();
1637+ Type *Ti32 = Type::getInt32Ty (C);
1638+ Type *Tfloat = Type::getFloatTy (C);
1639+
1640+ auto *SIToFP = cast<sandboxir::SIToFPInst>(&*It++);
1641+ EXPECT_EQ (SIToFP->getOpcode (), sandboxir::Instruction::Opcode::SIToFP);
1642+ EXPECT_EQ (SIToFP->getSrcTy (), Ti32);
1643+ EXPECT_EQ (SIToFP->getDestTy (), Tfloat);
1644+ auto *Ret = cast<sandboxir::ReturnInst>(&*It++);
1645+
1646+ {
1647+ // Check create() WhereIt, WhereBB
1648+ auto *NewI = cast<sandboxir::SIToFPInst>(
1649+ sandboxir::SIToFPInst::create (Arg, Tfloat, /* WhereIt=*/ BB->end (),
1650+ /* WhereBB=*/ BB, Ctx, " SIToFP" ));
1651+ // Check getOpcode().
1652+ EXPECT_EQ (NewI->getOpcode (), sandboxir::Instruction::Opcode::SIToFP);
1653+ // Check getSrcTy().
1654+ EXPECT_EQ (NewI->getSrcTy (), Arg->getType ());
1655+ // Check getDestTy().
1656+ EXPECT_EQ (NewI->getDestTy (), Tfloat);
1657+ // Check instr position.
1658+ EXPECT_EQ (NewI->getNextNode (), nullptr );
1659+ EXPECT_EQ (NewI->getPrevNode (), Ret);
1660+ }
1661+ {
1662+ // Check create() InsertBefore.
1663+ auto *NewI = cast<sandboxir::SIToFPInst>(
1664+ sandboxir::SIToFPInst::create (Arg, Tfloat,
1665+ /* InsertBefore=*/ Ret, Ctx, " SIToFP" ));
1666+ // Check getOpcode().
1667+ EXPECT_EQ (NewI->getOpcode (), sandboxir::Instruction::Opcode::SIToFP);
1668+ // Check getSrcTy().
1669+ EXPECT_EQ (NewI->getSrcTy (), Arg->getType ());
1670+ // Check getDestTy().
1671+ EXPECT_EQ (NewI->getDestTy (), Tfloat);
1672+ // Check instr position.
1673+ EXPECT_EQ (NewI->getNextNode (), Ret);
1674+ }
1675+ {
1676+ // Check create() InsertAtEnd.
1677+ auto *NewI = cast<sandboxir::SIToFPInst>(
1678+ sandboxir::SIToFPInst::create (Arg, Tfloat,
1679+ /* InsertAtEnd=*/ BB, Ctx, " SIToFP" ));
1680+ // Check getOpcode().
1681+ EXPECT_EQ (NewI->getOpcode (), sandboxir::Instruction::Opcode::SIToFP);
1682+ // Check getSrcTy().
1683+ EXPECT_EQ (NewI->getSrcTy (), Arg->getType ());
1684+ // Check getDestTy().
1685+ EXPECT_EQ (NewI->getDestTy (), Tfloat);
1686+ // Check instr position.
1687+ EXPECT_EQ (NewI->getNextNode (), nullptr );
1688+ EXPECT_EQ (NewI->getParent (), BB);
1689+ }
1690+ }
1691+
16221692TEST_F (SandboxIRTest, FPToUIInst) {
16231693 parseIR (C, R"IR(
16241694define void @foo(float %arg) {
0 commit comments