diff options
| author | Nate Begeman <natebegeman@mac.com> | 2004-09-29 03:45:33 +0000 | 
|---|---|---|
| committer | Nate Begeman <natebegeman@mac.com> | 2004-09-29 03:45:33 +0000 | 
| commit | 7b6df6def2b67d7d4f303cfde987d65ff9a24edb (patch) | |
| tree | 0462a6fb51e53fd52c9730a4670f37f8e3b52224 /llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp | |
| parent | 4023d4e1914f466148ad246dd304d434505430dc (diff) | |
| download | bcm5719-llvm-7b6df6def2b67d7d4f303cfde987d65ff9a24edb.tar.gz bcm5719-llvm-7b6df6def2b67d7d4f303cfde987d65ff9a24edb.zip | |
improve Type::BoolTy codegen by eliminating unnecessary clears and sign extends
llvm-svn: 16578
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp | 9 | 
1 files changed, 8 insertions, 1 deletions
| diff --git a/llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp b/llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp index afb96f732d3..9f1229a53b2 100644 --- a/llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp +++ b/llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp @@ -993,6 +993,11 @@ unsigned PPC32ISel::ExtendOrClear(MachineBasicBlock *MBB,    unsigned Reg = getReg(Op0, MBB, IP);    unsigned Class = getClassB(CompTy); +  // Since we know that boolean values will be either zero or one, we don't +  // have to extend or clear them. +  if (CompTy == Type::BoolTy) +    return Reg; +    // Before we do a comparison or SetCC, we have to make sure that we truncate    // the source registers appropriately.    if (Class == cByte) { @@ -1374,7 +1379,9 @@ void PPC32ISel::promote32(unsigned targetReg, const ValueRecord &VR) {    switch (getClassB(Ty)) {    case cByte:      // Extend value into target register (8->32) -    if (isUnsigned) +    if (Ty == Type::BoolTy) +      BuildMI(BB, PPC::OR, 2, targetReg).addReg(Reg).addReg(Reg); +    else if (isUnsigned)        BuildMI(BB, PPC::RLWINM, 4, targetReg).addReg(Reg).addZImm(0)          .addZImm(24).addZImm(31);      else | 

