Instructions.cpp revision 6ab2d18f5ea44bf740964036e08253b75ab601f9
1//===-- Instructions.cpp - Implement the LLVM instructions ----------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements all of the non-inline methods for the LLVM instruction
11// classes.
12//
13//===----------------------------------------------------------------------===//
14
15#include "llvm/BasicBlock.h"
16#include "llvm/Constants.h"
17#include "llvm/DerivedTypes.h"
18#include "llvm/Function.h"
19#include "llvm/Instructions.h"
20#include "llvm/ParameterAttributes.h"
21#include "llvm/Support/CallSite.h"
22#include "llvm/Support/ConstantRange.h"
23#include "llvm/Support/MathExtras.h"
24using namespace llvm;
25
26unsigned CallSite::getCallingConv() const {
27  if (CallInst *CI = dyn_cast<CallInst>(I))
28    return CI->getCallingConv();
29  else
30    return cast<InvokeInst>(I)->getCallingConv();
31}
32void CallSite::setCallingConv(unsigned CC) {
33  if (CallInst *CI = dyn_cast<CallInst>(I))
34    CI->setCallingConv(CC);
35  else
36    cast<InvokeInst>(I)->setCallingConv(CC);
37}
38
39
40
41
42//===----------------------------------------------------------------------===//
43//                            TerminatorInst Class
44//===----------------------------------------------------------------------===//
45
46// Out of line virtual method, so the vtable, etc has a home.
47TerminatorInst::~TerminatorInst() {
48}
49
50// Out of line virtual method, so the vtable, etc has a home.
51UnaryInstruction::~UnaryInstruction() {
52}
53
54
55//===----------------------------------------------------------------------===//
56//                               PHINode Class
57//===----------------------------------------------------------------------===//
58
59PHINode::PHINode(const PHINode &PN)
60  : Instruction(PN.getType(), Instruction::PHI,
61                new Use[PN.getNumOperands()], PN.getNumOperands()),
62    ReservedSpace(PN.getNumOperands()) {
63  Use *OL = OperandList;
64  for (unsigned i = 0, e = PN.getNumOperands(); i != e; i+=2) {
65    OL[i].init(PN.getOperand(i), this);
66    OL[i+1].init(PN.getOperand(i+1), this);
67  }
68}
69
70PHINode::~PHINode() {
71  delete [] OperandList;
72}
73
74// removeIncomingValue - Remove an incoming value.  This is useful if a
75// predecessor basic block is deleted.
76Value *PHINode::removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty) {
77  unsigned NumOps = getNumOperands();
78  Use *OL = OperandList;
79  assert(Idx*2 < NumOps && "BB not in PHI node!");
80  Value *Removed = OL[Idx*2];
81
82  // Move everything after this operand down.
83  //
84  // FIXME: we could just swap with the end of the list, then erase.  However,
85  // client might not expect this to happen.  The code as it is thrashes the
86  // use/def lists, which is kinda lame.
87  for (unsigned i = (Idx+1)*2; i != NumOps; i += 2) {
88    OL[i-2] = OL[i];
89    OL[i-2+1] = OL[i+1];
90  }
91
92  // Nuke the last value.
93  OL[NumOps-2].set(0);
94  OL[NumOps-2+1].set(0);
95  NumOperands = NumOps-2;
96
97  // If the PHI node is dead, because it has zero entries, nuke it now.
98  if (NumOps == 2 && DeletePHIIfEmpty) {
99    // If anyone is using this PHI, make them use a dummy value instead...
100    replaceAllUsesWith(UndefValue::get(getType()));
101    eraseFromParent();
102  }
103  return Removed;
104}
105
106/// resizeOperands - resize operands - This adjusts the length of the operands
107/// list according to the following behavior:
108///   1. If NumOps == 0, grow the operand list in response to a push_back style
109///      of operation.  This grows the number of ops by 1.5 times.
110///   2. If NumOps > NumOperands, reserve space for NumOps operands.
111///   3. If NumOps == NumOperands, trim the reserved space.
112///
113void PHINode::resizeOperands(unsigned NumOps) {
114  if (NumOps == 0) {
115    NumOps = (getNumOperands())*3/2;
116    if (NumOps < 4) NumOps = 4;      // 4 op PHI nodes are VERY common.
117  } else if (NumOps*2 > NumOperands) {
118    // No resize needed.
119    if (ReservedSpace >= NumOps) return;
120  } else if (NumOps == NumOperands) {
121    if (ReservedSpace == NumOps) return;
122  } else {
123    return;
124  }
125
126  ReservedSpace = NumOps;
127  Use *NewOps = new Use[NumOps];
128  Use *OldOps = OperandList;
129  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
130      NewOps[i].init(OldOps[i], this);
131      OldOps[i].set(0);
132  }
133  delete [] OldOps;
134  OperandList = NewOps;
135}
136
137/// hasConstantValue - If the specified PHI node always merges together the same
138/// value, return the value, otherwise return null.
139///
140Value *PHINode::hasConstantValue(bool AllowNonDominatingInstruction) const {
141  // If the PHI node only has one incoming value, eliminate the PHI node...
142  if (getNumIncomingValues() == 1)
143    if (getIncomingValue(0) != this)   // not  X = phi X
144      return getIncomingValue(0);
145    else
146      return UndefValue::get(getType());  // Self cycle is dead.
147
148  // Otherwise if all of the incoming values are the same for the PHI, replace
149  // the PHI node with the incoming value.
150  //
151  Value *InVal = 0;
152  bool HasUndefInput = false;
153  for (unsigned i = 0, e = getNumIncomingValues(); i != e; ++i)
154    if (isa<UndefValue>(getIncomingValue(i)))
155      HasUndefInput = true;
156    else if (getIncomingValue(i) != this)  // Not the PHI node itself...
157      if (InVal && getIncomingValue(i) != InVal)
158        return 0;  // Not the same, bail out.
159      else
160        InVal = getIncomingValue(i);
161
162  // The only case that could cause InVal to be null is if we have a PHI node
163  // that only has entries for itself.  In this case, there is no entry into the
164  // loop, so kill the PHI.
165  //
166  if (InVal == 0) InVal = UndefValue::get(getType());
167
168  // If we have a PHI node like phi(X, undef, X), where X is defined by some
169  // instruction, we cannot always return X as the result of the PHI node.  Only
170  // do this if X is not an instruction (thus it must dominate the PHI block),
171  // or if the client is prepared to deal with this possibility.
172  if (HasUndefInput && !AllowNonDominatingInstruction)
173    if (Instruction *IV = dyn_cast<Instruction>(InVal))
174      // If it's in the entry block, it dominates everything.
175      if (IV->getParent() != &IV->getParent()->getParent()->getEntryBlock() ||
176          isa<InvokeInst>(IV))
177        return 0;   // Cannot guarantee that InVal dominates this PHINode.
178
179  // All of the incoming values are the same, return the value now.
180  return InVal;
181}
182
183
184//===----------------------------------------------------------------------===//
185//                        CallInst Implementation
186//===----------------------------------------------------------------------===//
187
188CallInst::~CallInst() {
189  delete [] OperandList;
190  if (ParamAttrs)
191    ParamAttrs->dropRef();
192}
193
194void CallInst::init(Value *Func, Value* const *Params, unsigned NumParams) {
195  ParamAttrs = 0;
196  NumOperands = NumParams+1;
197  Use *OL = OperandList = new Use[NumParams+1];
198  OL[0].init(Func, this);
199
200  const FunctionType *FTy =
201    cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
202  FTy = FTy;  // silence warning.
203
204  assert((NumParams == FTy->getNumParams() ||
205          (FTy->isVarArg() && NumParams > FTy->getNumParams())) &&
206         "Calling a function with bad signature!");
207  for (unsigned i = 0; i != NumParams; ++i) {
208    assert((i >= FTy->getNumParams() ||
209            FTy->getParamType(i) == Params[i]->getType()) &&
210           "Calling a function with a bad signature!");
211    OL[i+1].init(Params[i], this);
212  }
213}
214
215void CallInst::init(Value *Func, Value *Actual1, Value *Actual2) {
216  ParamAttrs = 0;
217  NumOperands = 3;
218  Use *OL = OperandList = new Use[3];
219  OL[0].init(Func, this);
220  OL[1].init(Actual1, this);
221  OL[2].init(Actual2, this);
222
223  const FunctionType *FTy =
224    cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
225  FTy = FTy;  // silence warning.
226
227  assert((FTy->getNumParams() == 2 ||
228          (FTy->isVarArg() && FTy->getNumParams() < 2)) &&
229         "Calling a function with bad signature");
230  assert((0 >= FTy->getNumParams() ||
231          FTy->getParamType(0) == Actual1->getType()) &&
232         "Calling a function with a bad signature!");
233  assert((1 >= FTy->getNumParams() ||
234          FTy->getParamType(1) == Actual2->getType()) &&
235         "Calling a function with a bad signature!");
236}
237
238void CallInst::init(Value *Func, Value *Actual) {
239  ParamAttrs = 0;
240  NumOperands = 2;
241  Use *OL = OperandList = new Use[2];
242  OL[0].init(Func, this);
243  OL[1].init(Actual, this);
244
245  const FunctionType *FTy =
246    cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
247  FTy = FTy;  // silence warning.
248
249  assert((FTy->getNumParams() == 1 ||
250          (FTy->isVarArg() && FTy->getNumParams() == 0)) &&
251         "Calling a function with bad signature");
252  assert((0 == FTy->getNumParams() ||
253          FTy->getParamType(0) == Actual->getType()) &&
254         "Calling a function with a bad signature!");
255}
256
257void CallInst::init(Value *Func) {
258  ParamAttrs = 0;
259  NumOperands = 1;
260  Use *OL = OperandList = new Use[1];
261  OL[0].init(Func, this);
262
263  const FunctionType *FTy =
264    cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
265  FTy = FTy;  // silence warning.
266
267  assert(FTy->getNumParams() == 0 && "Calling a function with bad signature");
268}
269
270CallInst::CallInst(Value *Func, Value* const *Args, unsigned NumArgs,
271                   const std::string &Name, BasicBlock *InsertAtEnd)
272  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
273                                 ->getElementType())->getReturnType(),
274                Instruction::Call, 0, 0, InsertAtEnd) {
275  init(Func, Args, NumArgs);
276  setName(Name);
277}
278CallInst::CallInst(Value *Func, Value* const *Args, unsigned NumArgs,
279                   const std::string &Name, Instruction *InsertBefore)
280: Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
281                                 ->getElementType())->getReturnType(),
282              Instruction::Call, 0, 0, InsertBefore) {
283  init(Func, Args, NumArgs);
284  setName(Name);
285}
286
287CallInst::CallInst(Value *Func, Value *Actual1, Value *Actual2,
288                   const std::string &Name, Instruction  *InsertBefore)
289  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
290                                   ->getElementType())->getReturnType(),
291                Instruction::Call, 0, 0, InsertBefore) {
292  init(Func, Actual1, Actual2);
293  setName(Name);
294}
295
296CallInst::CallInst(Value *Func, Value *Actual1, Value *Actual2,
297                   const std::string &Name, BasicBlock  *InsertAtEnd)
298  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
299                                   ->getElementType())->getReturnType(),
300                Instruction::Call, 0, 0, InsertAtEnd) {
301  init(Func, Actual1, Actual2);
302  setName(Name);
303}
304
305CallInst::CallInst(Value *Func, Value* Actual, const std::string &Name,
306                   Instruction *InsertBefore)
307  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
308                                   ->getElementType())->getReturnType(),
309                Instruction::Call, 0, 0, InsertBefore) {
310  init(Func, Actual);
311  setName(Name);
312}
313
314CallInst::CallInst(Value *Func, Value* Actual, const std::string &Name,
315                   BasicBlock  *InsertAtEnd)
316  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
317                                   ->getElementType())->getReturnType(),
318                Instruction::Call, 0, 0, InsertAtEnd) {
319  init(Func, Actual);
320  setName(Name);
321}
322
323CallInst::CallInst(Value *Func, const std::string &Name,
324                   Instruction *InsertBefore)
325  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
326                                   ->getElementType())->getReturnType(),
327                Instruction::Call, 0, 0, InsertBefore) {
328  init(Func);
329  setName(Name);
330}
331
332CallInst::CallInst(Value *Func, const std::string &Name,
333                   BasicBlock *InsertAtEnd)
334  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
335                                   ->getElementType())->getReturnType(),
336                Instruction::Call, 0, 0, InsertAtEnd) {
337  init(Func);
338  setName(Name);
339}
340
341CallInst::CallInst(const CallInst &CI)
342  : Instruction(CI.getType(), Instruction::Call, new Use[CI.getNumOperands()],
343                CI.getNumOperands()) {
344  ParamAttrs = 0;
345  SubclassData = CI.SubclassData;
346  Use *OL = OperandList;
347  Use *InOL = CI.OperandList;
348  for (unsigned i = 0, e = CI.getNumOperands(); i != e; ++i)
349    OL[i].init(InOL[i], this);
350}
351
352void CallInst::setParamAttrs(ParamAttrsList *newAttrs) {
353  if (ParamAttrs)
354    ParamAttrs->dropRef();
355
356  if (newAttrs)
357    newAttrs->addRef();
358
359  ParamAttrs = newAttrs;
360}
361
362//===----------------------------------------------------------------------===//
363//                        InvokeInst Implementation
364//===----------------------------------------------------------------------===//
365
366InvokeInst::~InvokeInst() {
367  delete [] OperandList;
368  if (ParamAttrs)
369    ParamAttrs->dropRef();
370}
371
372void InvokeInst::init(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
373                      Value* const *Args, unsigned NumArgs) {
374  ParamAttrs = 0;
375  NumOperands = 3+NumArgs;
376  Use *OL = OperandList = new Use[3+NumArgs];
377  OL[0].init(Fn, this);
378  OL[1].init(IfNormal, this);
379  OL[2].init(IfException, this);
380  const FunctionType *FTy =
381    cast<FunctionType>(cast<PointerType>(Fn->getType())->getElementType());
382  FTy = FTy;  // silence warning.
383
384  assert((NumArgs == FTy->getNumParams()) ||
385         (FTy->isVarArg() && NumArgs > FTy->getNumParams()) &&
386         "Calling a function with bad signature");
387
388  for (unsigned i = 0, e = NumArgs; i != e; i++) {
389    assert((i >= FTy->getNumParams() ||
390            FTy->getParamType(i) == Args[i]->getType()) &&
391           "Invoking a function with a bad signature!");
392
393    OL[i+3].init(Args[i], this);
394  }
395}
396
397InvokeInst::InvokeInst(Value *Fn, BasicBlock *IfNormal,
398                       BasicBlock *IfException,
399                       Value* const *Args, unsigned NumArgs,
400                       const std::string &Name, Instruction *InsertBefore)
401  : TerminatorInst(cast<FunctionType>(cast<PointerType>(Fn->getType())
402                                    ->getElementType())->getReturnType(),
403                   Instruction::Invoke, 0, 0, InsertBefore) {
404  init(Fn, IfNormal, IfException, Args, NumArgs);
405  setName(Name);
406}
407
408InvokeInst::InvokeInst(Value *Fn, BasicBlock *IfNormal,
409                       BasicBlock *IfException,
410                       Value* const *Args, unsigned NumArgs,
411                       const std::string &Name, BasicBlock *InsertAtEnd)
412  : TerminatorInst(cast<FunctionType>(cast<PointerType>(Fn->getType())
413                                    ->getElementType())->getReturnType(),
414                   Instruction::Invoke, 0, 0, InsertAtEnd) {
415  init(Fn, IfNormal, IfException, Args, NumArgs);
416  setName(Name);
417}
418
419InvokeInst::InvokeInst(const InvokeInst &II)
420  : TerminatorInst(II.getType(), Instruction::Invoke,
421                   new Use[II.getNumOperands()], II.getNumOperands()) {
422  ParamAttrs = 0;
423  SubclassData = II.SubclassData;
424  Use *OL = OperandList, *InOL = II.OperandList;
425  for (unsigned i = 0, e = II.getNumOperands(); i != e; ++i)
426    OL[i].init(InOL[i], this);
427}
428
429BasicBlock *InvokeInst::getSuccessorV(unsigned idx) const {
430  return getSuccessor(idx);
431}
432unsigned InvokeInst::getNumSuccessorsV() const {
433  return getNumSuccessors();
434}
435void InvokeInst::setSuccessorV(unsigned idx, BasicBlock *B) {
436  return setSuccessor(idx, B);
437}
438
439void InvokeInst::setParamAttrs(ParamAttrsList *newAttrs) {
440  if (ParamAttrs)
441    ParamAttrs->dropRef();
442
443  if (newAttrs)
444    newAttrs->addRef();
445
446  ParamAttrs = newAttrs;
447}
448
449//===----------------------------------------------------------------------===//
450//                        ReturnInst Implementation
451//===----------------------------------------------------------------------===//
452
453ReturnInst::ReturnInst(const ReturnInst &RI)
454  : TerminatorInst(Type::VoidTy, Instruction::Ret,
455                   &RetVal, RI.getNumOperands()) {
456  if (RI.getNumOperands())
457    RetVal.init(RI.RetVal, this);
458}
459
460ReturnInst::ReturnInst(Value *retVal, Instruction *InsertBefore)
461  : TerminatorInst(Type::VoidTy, Instruction::Ret, &RetVal, 0, InsertBefore) {
462  init(retVal);
463}
464ReturnInst::ReturnInst(Value *retVal, BasicBlock *InsertAtEnd)
465  : TerminatorInst(Type::VoidTy, Instruction::Ret, &RetVal, 0, InsertAtEnd) {
466  init(retVal);
467}
468ReturnInst::ReturnInst(BasicBlock *InsertAtEnd)
469  : TerminatorInst(Type::VoidTy, Instruction::Ret, &RetVal, 0, InsertAtEnd) {
470}
471
472
473
474void ReturnInst::init(Value *retVal) {
475  if (retVal && retVal->getType() != Type::VoidTy) {
476    assert(!isa<BasicBlock>(retVal) &&
477           "Cannot return basic block.  Probably using the incorrect ctor");
478    NumOperands = 1;
479    RetVal.init(retVal, this);
480  }
481}
482
483unsigned ReturnInst::getNumSuccessorsV() const {
484  return getNumSuccessors();
485}
486
487// Out-of-line ReturnInst method, put here so the C++ compiler can choose to
488// emit the vtable for the class in this translation unit.
489void ReturnInst::setSuccessorV(unsigned idx, BasicBlock *NewSucc) {
490  assert(0 && "ReturnInst has no successors!");
491}
492
493BasicBlock *ReturnInst::getSuccessorV(unsigned idx) const {
494  assert(0 && "ReturnInst has no successors!");
495  abort();
496  return 0;
497}
498
499
500//===----------------------------------------------------------------------===//
501//                        UnwindInst Implementation
502//===----------------------------------------------------------------------===//
503
504UnwindInst::UnwindInst(Instruction *InsertBefore)
505  : TerminatorInst(Type::VoidTy, Instruction::Unwind, 0, 0, InsertBefore) {
506}
507UnwindInst::UnwindInst(BasicBlock *InsertAtEnd)
508  : TerminatorInst(Type::VoidTy, Instruction::Unwind, 0, 0, InsertAtEnd) {
509}
510
511
512unsigned UnwindInst::getNumSuccessorsV() const {
513  return getNumSuccessors();
514}
515
516void UnwindInst::setSuccessorV(unsigned idx, BasicBlock *NewSucc) {
517  assert(0 && "UnwindInst has no successors!");
518}
519
520BasicBlock *UnwindInst::getSuccessorV(unsigned idx) const {
521  assert(0 && "UnwindInst has no successors!");
522  abort();
523  return 0;
524}
525
526//===----------------------------------------------------------------------===//
527//                      UnreachableInst Implementation
528//===----------------------------------------------------------------------===//
529
530UnreachableInst::UnreachableInst(Instruction *InsertBefore)
531  : TerminatorInst(Type::VoidTy, Instruction::Unreachable, 0, 0, InsertBefore) {
532}
533UnreachableInst::UnreachableInst(BasicBlock *InsertAtEnd)
534  : TerminatorInst(Type::VoidTy, Instruction::Unreachable, 0, 0, InsertAtEnd) {
535}
536
537unsigned UnreachableInst::getNumSuccessorsV() const {
538  return getNumSuccessors();
539}
540
541void UnreachableInst::setSuccessorV(unsigned idx, BasicBlock *NewSucc) {
542  assert(0 && "UnwindInst has no successors!");
543}
544
545BasicBlock *UnreachableInst::getSuccessorV(unsigned idx) const {
546  assert(0 && "UnwindInst has no successors!");
547  abort();
548  return 0;
549}
550
551//===----------------------------------------------------------------------===//
552//                        BranchInst Implementation
553//===----------------------------------------------------------------------===//
554
555void BranchInst::AssertOK() {
556  if (isConditional())
557    assert(getCondition()->getType() == Type::Int1Ty &&
558           "May only branch on boolean predicates!");
559}
560
561BranchInst::BranchInst(BasicBlock *IfTrue, Instruction *InsertBefore)
562  : TerminatorInst(Type::VoidTy, Instruction::Br, Ops, 1, InsertBefore) {
563  assert(IfTrue != 0 && "Branch destination may not be null!");
564  Ops[0].init(reinterpret_cast<Value*>(IfTrue), this);
565}
566BranchInst::BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
567                       Instruction *InsertBefore)
568: TerminatorInst(Type::VoidTy, Instruction::Br, Ops, 3, InsertBefore) {
569  Ops[0].init(reinterpret_cast<Value*>(IfTrue), this);
570  Ops[1].init(reinterpret_cast<Value*>(IfFalse), this);
571  Ops[2].init(Cond, this);
572#ifndef NDEBUG
573  AssertOK();
574#endif
575}
576
577BranchInst::BranchInst(BasicBlock *IfTrue, BasicBlock *InsertAtEnd)
578  : TerminatorInst(Type::VoidTy, Instruction::Br, Ops, 1, InsertAtEnd) {
579  assert(IfTrue != 0 && "Branch destination may not be null!");
580  Ops[0].init(reinterpret_cast<Value*>(IfTrue), this);
581}
582
583BranchInst::BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
584           BasicBlock *InsertAtEnd)
585  : TerminatorInst(Type::VoidTy, Instruction::Br, Ops, 3, InsertAtEnd) {
586  Ops[0].init(reinterpret_cast<Value*>(IfTrue), this);
587  Ops[1].init(reinterpret_cast<Value*>(IfFalse), this);
588  Ops[2].init(Cond, this);
589#ifndef NDEBUG
590  AssertOK();
591#endif
592}
593
594
595BranchInst::BranchInst(const BranchInst &BI) :
596  TerminatorInst(Type::VoidTy, Instruction::Br, Ops, BI.getNumOperands()) {
597  OperandList[0].init(BI.getOperand(0), this);
598  if (BI.getNumOperands() != 1) {
599    assert(BI.getNumOperands() == 3 && "BR can have 1 or 3 operands!");
600    OperandList[1].init(BI.getOperand(1), this);
601    OperandList[2].init(BI.getOperand(2), this);
602  }
603}
604
605BasicBlock *BranchInst::getSuccessorV(unsigned idx) const {
606  return getSuccessor(idx);
607}
608unsigned BranchInst::getNumSuccessorsV() const {
609  return getNumSuccessors();
610}
611void BranchInst::setSuccessorV(unsigned idx, BasicBlock *B) {
612  setSuccessor(idx, B);
613}
614
615
616//===----------------------------------------------------------------------===//
617//                        AllocationInst Implementation
618//===----------------------------------------------------------------------===//
619
620static Value *getAISize(Value *Amt) {
621  if (!Amt)
622    Amt = ConstantInt::get(Type::Int32Ty, 1);
623  else {
624    assert(!isa<BasicBlock>(Amt) &&
625           "Passed basic block into allocation size parameter!  Ue other ctor");
626    assert(Amt->getType() == Type::Int32Ty &&
627           "Malloc/Allocation array size is not a 32-bit integer!");
628  }
629  return Amt;
630}
631
632AllocationInst::AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy,
633                               unsigned Align, const std::string &Name,
634                               Instruction *InsertBefore)
635  : UnaryInstruction(PointerType::get(Ty), iTy, getAISize(ArraySize),
636                     InsertBefore), Alignment(Align) {
637  assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
638  assert(Ty != Type::VoidTy && "Cannot allocate void!");
639  setName(Name);
640}
641
642AllocationInst::AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy,
643                               unsigned Align, const std::string &Name,
644                               BasicBlock *InsertAtEnd)
645  : UnaryInstruction(PointerType::get(Ty), iTy, getAISize(ArraySize),
646                     InsertAtEnd), Alignment(Align) {
647  assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
648  assert(Ty != Type::VoidTy && "Cannot allocate void!");
649  setName(Name);
650}
651
652// Out of line virtual method, so the vtable, etc has a home.
653AllocationInst::~AllocationInst() {
654}
655
656bool AllocationInst::isArrayAllocation() const {
657  if (ConstantInt *CI = dyn_cast<ConstantInt>(getOperand(0)))
658    return CI->getZExtValue() != 1;
659  return true;
660}
661
662const Type *AllocationInst::getAllocatedType() const {
663  return getType()->getElementType();
664}
665
666AllocaInst::AllocaInst(const AllocaInst &AI)
667  : AllocationInst(AI.getType()->getElementType(), (Value*)AI.getOperand(0),
668                   Instruction::Alloca, AI.getAlignment()) {
669}
670
671MallocInst::MallocInst(const MallocInst &MI)
672  : AllocationInst(MI.getType()->getElementType(), (Value*)MI.getOperand(0),
673                   Instruction::Malloc, MI.getAlignment()) {
674}
675
676//===----------------------------------------------------------------------===//
677//                             FreeInst Implementation
678//===----------------------------------------------------------------------===//
679
680void FreeInst::AssertOK() {
681  assert(isa<PointerType>(getOperand(0)->getType()) &&
682         "Can not free something of nonpointer type!");
683}
684
685FreeInst::FreeInst(Value *Ptr, Instruction *InsertBefore)
686  : UnaryInstruction(Type::VoidTy, Free, Ptr, InsertBefore) {
687  AssertOK();
688}
689
690FreeInst::FreeInst(Value *Ptr, BasicBlock *InsertAtEnd)
691  : UnaryInstruction(Type::VoidTy, Free, Ptr, InsertAtEnd) {
692  AssertOK();
693}
694
695
696//===----------------------------------------------------------------------===//
697//                           LoadInst Implementation
698//===----------------------------------------------------------------------===//
699
700void LoadInst::AssertOK() {
701  assert(isa<PointerType>(getOperand(0)->getType()) &&
702         "Ptr must have pointer type.");
703}
704
705LoadInst::LoadInst(Value *Ptr, const std::string &Name, Instruction *InsertBef)
706  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
707                     Load, Ptr, InsertBef) {
708  setVolatile(false);
709  setAlignment(0);
710  AssertOK();
711  setName(Name);
712}
713
714LoadInst::LoadInst(Value *Ptr, const std::string &Name, BasicBlock *InsertAE)
715  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
716                     Load, Ptr, InsertAE) {
717  setVolatile(false);
718  setAlignment(0);
719  AssertOK();
720  setName(Name);
721}
722
723LoadInst::LoadInst(Value *Ptr, const std::string &Name, bool isVolatile,
724                   Instruction *InsertBef)
725  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
726                     Load, Ptr, InsertBef) {
727  setVolatile(isVolatile);
728  setAlignment(0);
729  AssertOK();
730  setName(Name);
731}
732
733LoadInst::LoadInst(Value *Ptr, const std::string &Name, bool isVolatile,
734                   unsigned Align, Instruction *InsertBef)
735  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
736                     Load, Ptr, InsertBef) {
737  setVolatile(isVolatile);
738  setAlignment(Align);
739  AssertOK();
740  setName(Name);
741}
742
743LoadInst::LoadInst(Value *Ptr, const std::string &Name, bool isVolatile,
744                   unsigned Align, BasicBlock *InsertAE)
745  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
746                     Load, Ptr, InsertAE) {
747  setVolatile(isVolatile);
748  setAlignment(Align);
749  AssertOK();
750  setName(Name);
751}
752
753LoadInst::LoadInst(Value *Ptr, const std::string &Name, bool isVolatile,
754                   BasicBlock *InsertAE)
755  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
756                     Load, Ptr, InsertAE) {
757  setVolatile(isVolatile);
758  setAlignment(0);
759  AssertOK();
760  setName(Name);
761}
762
763
764
765LoadInst::LoadInst(Value *Ptr, const char *Name, Instruction *InsertBef)
766  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
767                     Load, Ptr, InsertBef) {
768  setVolatile(false);
769  setAlignment(0);
770  AssertOK();
771  if (Name && Name[0]) setName(Name);
772}
773
774LoadInst::LoadInst(Value *Ptr, const char *Name, BasicBlock *InsertAE)
775  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
776                     Load, Ptr, InsertAE) {
777  setVolatile(false);
778  setAlignment(0);
779  AssertOK();
780  if (Name && Name[0]) setName(Name);
781}
782
783LoadInst::LoadInst(Value *Ptr, const char *Name, bool isVolatile,
784                   Instruction *InsertBef)
785: UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
786                   Load, Ptr, InsertBef) {
787  setVolatile(isVolatile);
788  setAlignment(0);
789  AssertOK();
790  if (Name && Name[0]) setName(Name);
791}
792
793LoadInst::LoadInst(Value *Ptr, const char *Name, bool isVolatile,
794                   BasicBlock *InsertAE)
795  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
796                     Load, Ptr, InsertAE) {
797  setVolatile(isVolatile);
798  setAlignment(0);
799  AssertOK();
800  if (Name && Name[0]) setName(Name);
801}
802
803void LoadInst::setAlignment(unsigned Align) {
804  assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
805  SubclassData = (SubclassData & 1) | ((Log2_32(Align)+1)<<1);
806}
807
808//===----------------------------------------------------------------------===//
809//                           StoreInst Implementation
810//===----------------------------------------------------------------------===//
811
812void StoreInst::AssertOK() {
813  assert(isa<PointerType>(getOperand(1)->getType()) &&
814         "Ptr must have pointer type!");
815  assert(getOperand(0)->getType() ==
816                 cast<PointerType>(getOperand(1)->getType())->getElementType()
817         && "Ptr must be a pointer to Val type!");
818}
819
820
821StoreInst::StoreInst(Value *val, Value *addr, Instruction *InsertBefore)
822  : Instruction(Type::VoidTy, Store, Ops, 2, InsertBefore) {
823  Ops[0].init(val, this);
824  Ops[1].init(addr, this);
825  setVolatile(false);
826  setAlignment(0);
827  AssertOK();
828}
829
830StoreInst::StoreInst(Value *val, Value *addr, BasicBlock *InsertAtEnd)
831  : Instruction(Type::VoidTy, Store, Ops, 2, InsertAtEnd) {
832  Ops[0].init(val, this);
833  Ops[1].init(addr, this);
834  setVolatile(false);
835  setAlignment(0);
836  AssertOK();
837}
838
839StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile,
840                     Instruction *InsertBefore)
841  : Instruction(Type::VoidTy, Store, Ops, 2, InsertBefore) {
842  Ops[0].init(val, this);
843  Ops[1].init(addr, this);
844  setVolatile(isVolatile);
845  setAlignment(0);
846  AssertOK();
847}
848
849StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile,
850                     unsigned Align, Instruction *InsertBefore)
851  : Instruction(Type::VoidTy, Store, Ops, 2, InsertBefore) {
852  Ops[0].init(val, this);
853  Ops[1].init(addr, this);
854  setVolatile(isVolatile);
855  setAlignment(Align);
856  AssertOK();
857}
858
859StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile,
860                     unsigned Align, BasicBlock *InsertAtEnd)
861  : Instruction(Type::VoidTy, Store, Ops, 2, InsertAtEnd) {
862  Ops[0].init(val, this);
863  Ops[1].init(addr, this);
864  setVolatile(isVolatile);
865  setAlignment(Align);
866  AssertOK();
867}
868
869StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile,
870                     BasicBlock *InsertAtEnd)
871  : Instruction(Type::VoidTy, Store, Ops, 2, InsertAtEnd) {
872  Ops[0].init(val, this);
873  Ops[1].init(addr, this);
874  setVolatile(isVolatile);
875  setAlignment(0);
876  AssertOK();
877}
878
879void StoreInst::setAlignment(unsigned Align) {
880  assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
881  SubclassData = (SubclassData & 1) | ((Log2_32(Align)+1)<<1);
882}
883
884//===----------------------------------------------------------------------===//
885//                       GetElementPtrInst Implementation
886//===----------------------------------------------------------------------===//
887
888// checkType - Simple wrapper function to give a better assertion failure
889// message on bad indexes for a gep instruction.
890//
891static inline const Type *checkType(const Type *Ty) {
892  assert(Ty && "Invalid GetElementPtrInst indices for type!");
893  return Ty;
894}
895
896void GetElementPtrInst::init(Value *Ptr, Value* const *Idx, unsigned NumIdx) {
897  NumOperands = 1+NumIdx;
898  Use *OL = OperandList = new Use[NumOperands];
899  OL[0].init(Ptr, this);
900
901  for (unsigned i = 0; i != NumIdx; ++i)
902    OL[i+1].init(Idx[i], this);
903}
904
905void GetElementPtrInst::init(Value *Ptr, Value *Idx0, Value *Idx1) {
906  NumOperands = 3;
907  Use *OL = OperandList = new Use[3];
908  OL[0].init(Ptr, this);
909  OL[1].init(Idx0, this);
910  OL[2].init(Idx1, this);
911}
912
913void GetElementPtrInst::init(Value *Ptr, Value *Idx) {
914  NumOperands = 2;
915  Use *OL = OperandList = new Use[2];
916  OL[0].init(Ptr, this);
917  OL[1].init(Idx, this);
918}
919
920
921GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value* const *Idx,
922                                     unsigned NumIdx,
923                                     const std::string &Name, Instruction *InBe)
924: Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(),
925                                                        Idx, NumIdx, true))),
926              GetElementPtr, 0, 0, InBe) {
927  init(Ptr, Idx, NumIdx);
928  setName(Name);
929}
930
931GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value* const *Idx,
932                                     unsigned NumIdx,
933                                     const std::string &Name, BasicBlock *IAE)
934: Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(),
935                                                        Idx, NumIdx, true))),
936              GetElementPtr, 0, 0, IAE) {
937  init(Ptr, Idx, NumIdx);
938  setName(Name);
939}
940
941GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value *Idx,
942                                     const std::string &Name, Instruction *InBe)
943  : Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(),Idx))),
944                GetElementPtr, 0, 0, InBe) {
945  init(Ptr, Idx);
946  setName(Name);
947}
948
949GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value *Idx,
950                                     const std::string &Name, BasicBlock *IAE)
951  : Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(),Idx))),
952                GetElementPtr, 0, 0, IAE) {
953  init(Ptr, Idx);
954  setName(Name);
955}
956
957GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value *Idx0, Value *Idx1,
958                                     const std::string &Name, Instruction *InBe)
959  : Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(),
960                                                          Idx0, Idx1, true))),
961                GetElementPtr, 0, 0, InBe) {
962  init(Ptr, Idx0, Idx1);
963  setName(Name);
964}
965
966GetElementPtrInst::GetElementPtrInst(Value *Ptr, Value *Idx0, Value *Idx1,
967                                     const std::string &Name, BasicBlock *IAE)
968  : Instruction(PointerType::get(checkType(getIndexedType(Ptr->getType(),
969                                                          Idx0, Idx1, true))),
970                GetElementPtr, 0, 0, IAE) {
971  init(Ptr, Idx0, Idx1);
972  setName(Name);
973}
974
975GetElementPtrInst::~GetElementPtrInst() {
976  delete[] OperandList;
977}
978
979// getIndexedType - Returns the type of the element that would be loaded with
980// a load instruction with the specified parameters.
981//
982// A null type is returned if the indices are invalid for the specified
983// pointer type.
984//
985const Type* GetElementPtrInst::getIndexedType(const Type *Ptr,
986                                              Value* const *Idxs,
987                                              unsigned NumIdx,
988                                              bool AllowCompositeLeaf) {
989  if (!isa<PointerType>(Ptr)) return 0;   // Type isn't a pointer type!
990
991  // Handle the special case of the empty set index set...
992  if (NumIdx == 0)
993    if (AllowCompositeLeaf ||
994        cast<PointerType>(Ptr)->getElementType()->isFirstClassType())
995      return cast<PointerType>(Ptr)->getElementType();
996    else
997      return 0;
998
999  unsigned CurIdx = 0;
1000  while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
1001    if (NumIdx == CurIdx) {
1002      if (AllowCompositeLeaf || CT->isFirstClassType()) return Ptr;
1003      return 0;   // Can't load a whole structure or array!?!?
1004    }
1005
1006    Value *Index = Idxs[CurIdx++];
1007    if (isa<PointerType>(CT) && CurIdx != 1)
1008      return 0;  // Can only index into pointer types at the first index!
1009    if (!CT->indexValid(Index)) return 0;
1010    Ptr = CT->getTypeAtIndex(Index);
1011
1012    // If the new type forwards to another type, then it is in the middle
1013    // of being refined to another type (and hence, may have dropped all
1014    // references to what it was using before).  So, use the new forwarded
1015    // type.
1016    if (const Type * Ty = Ptr->getForwardedType()) {
1017      Ptr = Ty;
1018    }
1019  }
1020  return CurIdx == NumIdx ? Ptr : 0;
1021}
1022
1023const Type* GetElementPtrInst::getIndexedType(const Type *Ptr,
1024                                              Value *Idx0, Value *Idx1,
1025                                              bool AllowCompositeLeaf) {
1026  const PointerType *PTy = dyn_cast<PointerType>(Ptr);
1027  if (!PTy) return 0;   // Type isn't a pointer type!
1028
1029  // Check the pointer index.
1030  if (!PTy->indexValid(Idx0)) return 0;
1031
1032  const CompositeType *CT = dyn_cast<CompositeType>(PTy->getElementType());
1033  if (!CT || !CT->indexValid(Idx1)) return 0;
1034
1035  const Type *ElTy = CT->getTypeAtIndex(Idx1);
1036  if (AllowCompositeLeaf || ElTy->isFirstClassType())
1037    return ElTy;
1038  return 0;
1039}
1040
1041const Type* GetElementPtrInst::getIndexedType(const Type *Ptr, Value *Idx) {
1042  const PointerType *PTy = dyn_cast<PointerType>(Ptr);
1043  if (!PTy) return 0;   // Type isn't a pointer type!
1044
1045  // Check the pointer index.
1046  if (!PTy->indexValid(Idx)) return 0;
1047
1048  return PTy->getElementType();
1049}
1050
1051
1052/// hasAllZeroIndices - Return true if all of the indices of this GEP are
1053/// zeros.  If so, the result pointer and the first operand have the same
1054/// value, just potentially different types.
1055bool GetElementPtrInst::hasAllZeroIndices() const {
1056  for (unsigned i = 1, e = getNumOperands(); i != e; ++i) {
1057    if (ConstantInt *CI = dyn_cast<ConstantInt>(getOperand(i))) {
1058      if (!CI->isZero()) return false;
1059    } else {
1060      return false;
1061    }
1062  }
1063  return true;
1064}
1065
1066/// hasAllConstantIndices - Return true if all of the indices of this GEP are
1067/// constant integers.  If so, the result pointer and the first operand have
1068/// a constant offset between them.
1069bool GetElementPtrInst::hasAllConstantIndices() const {
1070  for (unsigned i = 1, e = getNumOperands(); i != e; ++i) {
1071    if (!isa<ConstantInt>(getOperand(i)))
1072      return false;
1073  }
1074  return true;
1075}
1076
1077
1078//===----------------------------------------------------------------------===//
1079//                           ExtractElementInst Implementation
1080//===----------------------------------------------------------------------===//
1081
1082ExtractElementInst::ExtractElementInst(Value *Val, Value *Index,
1083                                       const std::string &Name,
1084                                       Instruction *InsertBef)
1085  : Instruction(cast<VectorType>(Val->getType())->getElementType(),
1086                ExtractElement, Ops, 2, InsertBef) {
1087  assert(isValidOperands(Val, Index) &&
1088         "Invalid extractelement instruction operands!");
1089  Ops[0].init(Val, this);
1090  Ops[1].init(Index, this);
1091  setName(Name);
1092}
1093
1094ExtractElementInst::ExtractElementInst(Value *Val, unsigned IndexV,
1095                                       const std::string &Name,
1096                                       Instruction *InsertBef)
1097  : Instruction(cast<VectorType>(Val->getType())->getElementType(),
1098                ExtractElement, Ops, 2, InsertBef) {
1099  Constant *Index = ConstantInt::get(Type::Int32Ty, IndexV);
1100  assert(isValidOperands(Val, Index) &&
1101         "Invalid extractelement instruction operands!");
1102  Ops[0].init(Val, this);
1103  Ops[1].init(Index, this);
1104  setName(Name);
1105}
1106
1107
1108ExtractElementInst::ExtractElementInst(Value *Val, Value *Index,
1109                                       const std::string &Name,
1110                                       BasicBlock *InsertAE)
1111  : Instruction(cast<VectorType>(Val->getType())->getElementType(),
1112                ExtractElement, Ops, 2, InsertAE) {
1113  assert(isValidOperands(Val, Index) &&
1114         "Invalid extractelement instruction operands!");
1115
1116  Ops[0].init(Val, this);
1117  Ops[1].init(Index, this);
1118  setName(Name);
1119}
1120
1121ExtractElementInst::ExtractElementInst(Value *Val, unsigned IndexV,
1122                                       const std::string &Name,
1123                                       BasicBlock *InsertAE)
1124  : Instruction(cast<VectorType>(Val->getType())->getElementType(),
1125                ExtractElement, Ops, 2, InsertAE) {
1126  Constant *Index = ConstantInt::get(Type::Int32Ty, IndexV);
1127  assert(isValidOperands(Val, Index) &&
1128         "Invalid extractelement instruction operands!");
1129
1130  Ops[0].init(Val, this);
1131  Ops[1].init(Index, this);
1132  setName(Name);
1133}
1134
1135
1136bool ExtractElementInst::isValidOperands(const Value *Val, const Value *Index) {
1137  if (!isa<VectorType>(Val->getType()) || Index->getType() != Type::Int32Ty)
1138    return false;
1139  return true;
1140}
1141
1142
1143//===----------------------------------------------------------------------===//
1144//                           InsertElementInst Implementation
1145//===----------------------------------------------------------------------===//
1146
1147InsertElementInst::InsertElementInst(const InsertElementInst &IE)
1148    : Instruction(IE.getType(), InsertElement, Ops, 3) {
1149  Ops[0].init(IE.Ops[0], this);
1150  Ops[1].init(IE.Ops[1], this);
1151  Ops[2].init(IE.Ops[2], this);
1152}
1153InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index,
1154                                     const std::string &Name,
1155                                     Instruction *InsertBef)
1156  : Instruction(Vec->getType(), InsertElement, Ops, 3, InsertBef) {
1157  assert(isValidOperands(Vec, Elt, Index) &&
1158         "Invalid insertelement instruction operands!");
1159  Ops[0].init(Vec, this);
1160  Ops[1].init(Elt, this);
1161  Ops[2].init(Index, this);
1162  setName(Name);
1163}
1164
1165InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, unsigned IndexV,
1166                                     const std::string &Name,
1167                                     Instruction *InsertBef)
1168  : Instruction(Vec->getType(), InsertElement, Ops, 3, InsertBef) {
1169  Constant *Index = ConstantInt::get(Type::Int32Ty, IndexV);
1170  assert(isValidOperands(Vec, Elt, Index) &&
1171         "Invalid insertelement instruction operands!");
1172  Ops[0].init(Vec, this);
1173  Ops[1].init(Elt, this);
1174  Ops[2].init(Index, this);
1175  setName(Name);
1176}
1177
1178
1179InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index,
1180                                     const std::string &Name,
1181                                     BasicBlock *InsertAE)
1182  : Instruction(Vec->getType(), InsertElement, Ops, 3, InsertAE) {
1183  assert(isValidOperands(Vec, Elt, Index) &&
1184         "Invalid insertelement instruction operands!");
1185
1186  Ops[0].init(Vec, this);
1187  Ops[1].init(Elt, this);
1188  Ops[2].init(Index, this);
1189  setName(Name);
1190}
1191
1192InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, unsigned IndexV,
1193                                     const std::string &Name,
1194                                     BasicBlock *InsertAE)
1195: Instruction(Vec->getType(), InsertElement, Ops, 3, InsertAE) {
1196  Constant *Index = ConstantInt::get(Type::Int32Ty, IndexV);
1197  assert(isValidOperands(Vec, Elt, Index) &&
1198         "Invalid insertelement instruction operands!");
1199
1200  Ops[0].init(Vec, this);
1201  Ops[1].init(Elt, this);
1202  Ops[2].init(Index, this);
1203  setName(Name);
1204}
1205
1206bool InsertElementInst::isValidOperands(const Value *Vec, const Value *Elt,
1207                                        const Value *Index) {
1208  if (!isa<VectorType>(Vec->getType()))
1209    return false;   // First operand of insertelement must be vector type.
1210
1211  if (Elt->getType() != cast<VectorType>(Vec->getType())->getElementType())
1212    return false;// Second operand of insertelement must be vector element type.
1213
1214  if (Index->getType() != Type::Int32Ty)
1215    return false;  // Third operand of insertelement must be uint.
1216  return true;
1217}
1218
1219
1220//===----------------------------------------------------------------------===//
1221//                      ShuffleVectorInst Implementation
1222//===----------------------------------------------------------------------===//
1223
1224ShuffleVectorInst::ShuffleVectorInst(const ShuffleVectorInst &SV)
1225    : Instruction(SV.getType(), ShuffleVector, Ops, 3) {
1226  Ops[0].init(SV.Ops[0], this);
1227  Ops[1].init(SV.Ops[1], this);
1228  Ops[2].init(SV.Ops[2], this);
1229}
1230
1231ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
1232                                     const std::string &Name,
1233                                     Instruction *InsertBefore)
1234  : Instruction(V1->getType(), ShuffleVector, Ops, 3, InsertBefore) {
1235  assert(isValidOperands(V1, V2, Mask) &&
1236         "Invalid shuffle vector instruction operands!");
1237  Ops[0].init(V1, this);
1238  Ops[1].init(V2, this);
1239  Ops[2].init(Mask, this);
1240  setName(Name);
1241}
1242
1243ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
1244                                     const std::string &Name,
1245                                     BasicBlock *InsertAtEnd)
1246  : Instruction(V1->getType(), ShuffleVector, Ops, 3, InsertAtEnd) {
1247  assert(isValidOperands(V1, V2, Mask) &&
1248         "Invalid shuffle vector instruction operands!");
1249
1250  Ops[0].init(V1, this);
1251  Ops[1].init(V2, this);
1252  Ops[2].init(Mask, this);
1253  setName(Name);
1254}
1255
1256bool ShuffleVectorInst::isValidOperands(const Value *V1, const Value *V2,
1257                                        const Value *Mask) {
1258  if (!isa<VectorType>(V1->getType())) return false;
1259  if (V1->getType() != V2->getType()) return false;
1260  if (!isa<VectorType>(Mask->getType()) ||
1261         cast<VectorType>(Mask->getType())->getElementType() != Type::Int32Ty ||
1262         cast<VectorType>(Mask->getType())->getNumElements() !=
1263         cast<VectorType>(V1->getType())->getNumElements())
1264    return false;
1265  return true;
1266}
1267
1268
1269//===----------------------------------------------------------------------===//
1270//                             BinaryOperator Class
1271//===----------------------------------------------------------------------===//
1272
1273BinaryOperator::BinaryOperator(BinaryOps iType, Value *S1, Value *S2,
1274                               const Type *Ty, const std::string &Name,
1275                               Instruction *InsertBefore)
1276  : Instruction(Ty, iType, Ops, 2, InsertBefore) {
1277  Ops[0].init(S1, this);
1278  Ops[1].init(S2, this);
1279  init(iType);
1280  setName(Name);
1281}
1282
1283BinaryOperator::BinaryOperator(BinaryOps iType, Value *S1, Value *S2,
1284                               const Type *Ty, const std::string &Name,
1285                               BasicBlock *InsertAtEnd)
1286  : Instruction(Ty, iType, Ops, 2, InsertAtEnd) {
1287  Ops[0].init(S1, this);
1288  Ops[1].init(S2, this);
1289  init(iType);
1290  setName(Name);
1291}
1292
1293
1294void BinaryOperator::init(BinaryOps iType) {
1295  Value *LHS = getOperand(0), *RHS = getOperand(1);
1296  LHS = LHS; RHS = RHS; // Silence warnings.
1297  assert(LHS->getType() == RHS->getType() &&
1298         "Binary operator operand types must match!");
1299#ifndef NDEBUG
1300  switch (iType) {
1301  case Add: case Sub:
1302  case Mul:
1303    assert(getType() == LHS->getType() &&
1304           "Arithmetic operation should return same type as operands!");
1305    assert((getType()->isInteger() || getType()->isFloatingPoint() ||
1306            isa<VectorType>(getType())) &&
1307          "Tried to create an arithmetic operation on a non-arithmetic type!");
1308    break;
1309  case UDiv:
1310  case SDiv:
1311    assert(getType() == LHS->getType() &&
1312           "Arithmetic operation should return same type as operands!");
1313    assert((getType()->isInteger() || (isa<VectorType>(getType()) &&
1314            cast<VectorType>(getType())->getElementType()->isInteger())) &&
1315           "Incorrect operand type (not integer) for S/UDIV");
1316    break;
1317  case FDiv:
1318    assert(getType() == LHS->getType() &&
1319           "Arithmetic operation should return same type as operands!");
1320    assert((getType()->isFloatingPoint() || (isa<VectorType>(getType()) &&
1321            cast<VectorType>(getType())->getElementType()->isFloatingPoint()))
1322            && "Incorrect operand type (not floating point) for FDIV");
1323    break;
1324  case URem:
1325  case SRem:
1326    assert(getType() == LHS->getType() &&
1327           "Arithmetic operation should return same type as operands!");
1328    assert((getType()->isInteger() || (isa<VectorType>(getType()) &&
1329            cast<VectorType>(getType())->getElementType()->isInteger())) &&
1330           "Incorrect operand type (not integer) for S/UREM");
1331    break;
1332  case FRem:
1333    assert(getType() == LHS->getType() &&
1334           "Arithmetic operation should return same type as operands!");
1335    assert((getType()->isFloatingPoint() || (isa<VectorType>(getType()) &&
1336            cast<VectorType>(getType())->getElementType()->isFloatingPoint()))
1337            && "Incorrect operand type (not floating point) for FREM");
1338    break;
1339  case Shl:
1340  case LShr:
1341  case AShr:
1342    assert(getType() == LHS->getType() &&
1343           "Shift operation should return same type as operands!");
1344    assert(getType()->isInteger() &&
1345           "Shift operation requires integer operands");
1346    break;
1347  case And: case Or:
1348  case Xor:
1349    assert(getType() == LHS->getType() &&
1350           "Logical operation should return same type as operands!");
1351    assert((getType()->isInteger() ||
1352            (isa<VectorType>(getType()) &&
1353             cast<VectorType>(getType())->getElementType()->isInteger())) &&
1354           "Tried to create a logical operation on a non-integral type!");
1355    break;
1356  default:
1357    break;
1358  }
1359#endif
1360}
1361
1362BinaryOperator *BinaryOperator::create(BinaryOps Op, Value *S1, Value *S2,
1363                                       const std::string &Name,
1364                                       Instruction *InsertBefore) {
1365  assert(S1->getType() == S2->getType() &&
1366         "Cannot create binary operator with two operands of differing type!");
1367  return new BinaryOperator(Op, S1, S2, S1->getType(), Name, InsertBefore);
1368}
1369
1370BinaryOperator *BinaryOperator::create(BinaryOps Op, Value *S1, Value *S2,
1371                                       const std::string &Name,
1372                                       BasicBlock *InsertAtEnd) {
1373  BinaryOperator *Res = create(Op, S1, S2, Name);
1374  InsertAtEnd->getInstList().push_back(Res);
1375  return Res;
1376}
1377
1378BinaryOperator *BinaryOperator::createNeg(Value *Op, const std::string &Name,
1379                                          Instruction *InsertBefore) {
1380  Value *zero = ConstantExpr::getZeroValueForNegationExpr(Op->getType());
1381  return new BinaryOperator(Instruction::Sub,
1382                            zero, Op,
1383                            Op->getType(), Name, InsertBefore);
1384}
1385
1386BinaryOperator *BinaryOperator::createNeg(Value *Op, const std::string &Name,
1387                                          BasicBlock *InsertAtEnd) {
1388  Value *zero = ConstantExpr::getZeroValueForNegationExpr(Op->getType());
1389  return new BinaryOperator(Instruction::Sub,
1390                            zero, Op,
1391                            Op->getType(), Name, InsertAtEnd);
1392}
1393
1394BinaryOperator *BinaryOperator::createNot(Value *Op, const std::string &Name,
1395                                          Instruction *InsertBefore) {
1396  Constant *C;
1397  if (const VectorType *PTy = dyn_cast<VectorType>(Op->getType())) {
1398    C = ConstantInt::getAllOnesValue(PTy->getElementType());
1399    C = ConstantVector::get(std::vector<Constant*>(PTy->getNumElements(), C));
1400  } else {
1401    C = ConstantInt::getAllOnesValue(Op->getType());
1402  }
1403
1404  return new BinaryOperator(Instruction::Xor, Op, C,
1405                            Op->getType(), Name, InsertBefore);
1406}
1407
1408BinaryOperator *BinaryOperator::createNot(Value *Op, const std::string &Name,
1409                                          BasicBlock *InsertAtEnd) {
1410  Constant *AllOnes;
1411  if (const VectorType *PTy = dyn_cast<VectorType>(Op->getType())) {
1412    // Create a vector of all ones values.
1413    Constant *Elt = ConstantInt::getAllOnesValue(PTy->getElementType());
1414    AllOnes =
1415      ConstantVector::get(std::vector<Constant*>(PTy->getNumElements(), Elt));
1416  } else {
1417    AllOnes = ConstantInt::getAllOnesValue(Op->getType());
1418  }
1419
1420  return new BinaryOperator(Instruction::Xor, Op, AllOnes,
1421                            Op->getType(), Name, InsertAtEnd);
1422}
1423
1424
1425// isConstantAllOnes - Helper function for several functions below
1426static inline bool isConstantAllOnes(const Value *V) {
1427  if (const ConstantInt *CI = dyn_cast<ConstantInt>(V))
1428    return CI->isAllOnesValue();
1429  if (const ConstantVector *CV = dyn_cast<ConstantVector>(V))
1430    return CV->isAllOnesValue();
1431  return false;
1432}
1433
1434bool BinaryOperator::isNeg(const Value *V) {
1435  if (const BinaryOperator *Bop = dyn_cast<BinaryOperator>(V))
1436    if (Bop->getOpcode() == Instruction::Sub)
1437      return Bop->getOperand(0) ==
1438             ConstantExpr::getZeroValueForNegationExpr(Bop->getType());
1439  return false;
1440}
1441
1442bool BinaryOperator::isNot(const Value *V) {
1443  if (const BinaryOperator *Bop = dyn_cast<BinaryOperator>(V))
1444    return (Bop->getOpcode() == Instruction::Xor &&
1445            (isConstantAllOnes(Bop->getOperand(1)) ||
1446             isConstantAllOnes(Bop->getOperand(0))));
1447  return false;
1448}
1449
1450Value *BinaryOperator::getNegArgument(Value *BinOp) {
1451  assert(isNeg(BinOp) && "getNegArgument from non-'neg' instruction!");
1452  return cast<BinaryOperator>(BinOp)->getOperand(1);
1453}
1454
1455const Value *BinaryOperator::getNegArgument(const Value *BinOp) {
1456  return getNegArgument(const_cast<Value*>(BinOp));
1457}
1458
1459Value *BinaryOperator::getNotArgument(Value *BinOp) {
1460  assert(isNot(BinOp) && "getNotArgument on non-'not' instruction!");
1461  BinaryOperator *BO = cast<BinaryOperator>(BinOp);
1462  Value *Op0 = BO->getOperand(0);
1463  Value *Op1 = BO->getOperand(1);
1464  if (isConstantAllOnes(Op0)) return Op1;
1465
1466  assert(isConstantAllOnes(Op1));
1467  return Op0;
1468}
1469
1470const Value *BinaryOperator::getNotArgument(const Value *BinOp) {
1471  return getNotArgument(const_cast<Value*>(BinOp));
1472}
1473
1474
1475// swapOperands - Exchange the two operands to this instruction.  This
1476// instruction is safe to use on any binary instruction and does not
1477// modify the semantics of the instruction.  If the instruction is
1478// order dependent (SetLT f.e.) the opcode is changed.
1479//
1480bool BinaryOperator::swapOperands() {
1481  if (!isCommutative())
1482    return true; // Can't commute operands
1483  std::swap(Ops[0], Ops[1]);
1484  return false;
1485}
1486
1487//===----------------------------------------------------------------------===//
1488//                                CastInst Class
1489//===----------------------------------------------------------------------===//
1490
1491// Just determine if this cast only deals with integral->integral conversion.
1492bool CastInst::isIntegerCast() const {
1493  switch (getOpcode()) {
1494    default: return false;
1495    case Instruction::ZExt:
1496    case Instruction::SExt:
1497    case Instruction::Trunc:
1498      return true;
1499    case Instruction::BitCast:
1500      return getOperand(0)->getType()->isInteger() && getType()->isInteger();
1501  }
1502}
1503
1504bool CastInst::isLosslessCast() const {
1505  // Only BitCast can be lossless, exit fast if we're not BitCast
1506  if (getOpcode() != Instruction::BitCast)
1507    return false;
1508
1509  // Identity cast is always lossless
1510  const Type* SrcTy = getOperand(0)->getType();
1511  const Type* DstTy = getType();
1512  if (SrcTy == DstTy)
1513    return true;
1514
1515  // Pointer to pointer is always lossless.
1516  if (isa<PointerType>(SrcTy))
1517    return isa<PointerType>(DstTy);
1518  return false;  // Other types have no identity values
1519}
1520
1521/// This function determines if the CastInst does not require any bits to be
1522/// changed in order to effect the cast. Essentially, it identifies cases where
1523/// no code gen is necessary for the cast, hence the name no-op cast.  For
1524/// example, the following are all no-op casts:
1525/// # bitcast uint %X, int
1526/// # bitcast uint* %x, sbyte*
1527/// # bitcast vector< 2 x int > %x, vector< 4 x short>
1528/// # ptrtoint uint* %x, uint     ; on 32-bit plaforms only
1529/// @brief Determine if a cast is a no-op.
1530bool CastInst::isNoopCast(const Type *IntPtrTy) const {
1531  switch (getOpcode()) {
1532    default:
1533      assert(!"Invalid CastOp");
1534    case Instruction::Trunc:
1535    case Instruction::ZExt:
1536    case Instruction::SExt:
1537    case Instruction::FPTrunc:
1538    case Instruction::FPExt:
1539    case Instruction::UIToFP:
1540    case Instruction::SIToFP:
1541    case Instruction::FPToUI:
1542    case Instruction::FPToSI:
1543      return false; // These always modify bits
1544    case Instruction::BitCast:
1545      return true;  // BitCast never modifies bits.
1546    case Instruction::PtrToInt:
1547      return IntPtrTy->getPrimitiveSizeInBits() ==
1548            getType()->getPrimitiveSizeInBits();
1549    case Instruction::IntToPtr:
1550      return IntPtrTy->getPrimitiveSizeInBits() ==
1551             getOperand(0)->getType()->getPrimitiveSizeInBits();
1552  }
1553}
1554
1555/// This function determines if a pair of casts can be eliminated and what
1556/// opcode should be used in the elimination. This assumes that there are two
1557/// instructions like this:
1558/// *  %F = firstOpcode SrcTy %x to MidTy
1559/// *  %S = secondOpcode MidTy %F to DstTy
1560/// The function returns a resultOpcode so these two casts can be replaced with:
1561/// *  %Replacement = resultOpcode %SrcTy %x to DstTy
1562/// If no such cast is permited, the function returns 0.
1563unsigned CastInst::isEliminableCastPair(
1564  Instruction::CastOps firstOp, Instruction::CastOps secondOp,
1565  const Type *SrcTy, const Type *MidTy, const Type *DstTy, const Type *IntPtrTy)
1566{
1567  // Define the 144 possibilities for these two cast instructions. The values
1568  // in this matrix determine what to do in a given situation and select the
1569  // case in the switch below.  The rows correspond to firstOp, the columns
1570  // correspond to secondOp.  In looking at the table below, keep in  mind
1571  // the following cast properties:
1572  //
1573  //          Size Compare       Source               Destination
1574  // Operator  Src ? Size   Type       Sign         Type       Sign
1575  // -------- ------------ -------------------   ---------------------
1576  // TRUNC         >       Integer      Any        Integral     Any
1577  // ZEXT          <       Integral   Unsigned     Integer      Any
1578  // SEXT          <       Integral    Signed      Integer      Any
1579  // FPTOUI       n/a      FloatPt      n/a        Integral   Unsigned
1580  // FPTOSI       n/a      FloatPt      n/a        Integral    Signed
1581  // UITOFP       n/a      Integral   Unsigned     FloatPt      n/a
1582  // SITOFP       n/a      Integral    Signed      FloatPt      n/a
1583  // FPTRUNC       >       FloatPt      n/a        FloatPt      n/a
1584  // FPEXT         <       FloatPt      n/a        FloatPt      n/a
1585  // PTRTOINT     n/a      Pointer      n/a        Integral   Unsigned
1586  // INTTOPTR     n/a      Integral   Unsigned     Pointer      n/a
1587  // BITCONVERT    =       FirstClass   n/a       FirstClass    n/a
1588  //
1589  // NOTE: some transforms are safe, but we consider them to be non-profitable.
1590  // For example, we could merge "fptoui double to uint" + "zext uint to ulong",
1591  // into "fptoui double to ulong", but this loses information about the range
1592  // of the produced value (we no longer know the top-part is all zeros).
1593  // Further this conversion is often much more expensive for typical hardware,
1594  // and causes issues when building libgcc.  We disallow fptosi+sext for the
1595  // same reason.
1596  const unsigned numCastOps =
1597    Instruction::CastOpsEnd - Instruction::CastOpsBegin;
1598  static const uint8_t CastResults[numCastOps][numCastOps] = {
1599    // T        F  F  U  S  F  F  P  I  B   -+
1600    // R  Z  S  P  P  I  I  T  P  2  N  T    |
1601    // U  E  E  2  2  2  2  R  E  I  T  C    +- secondOp
1602    // N  X  X  U  S  F  F  N  X  N  2  V    |
1603    // C  T  T  I  I  P  P  C  T  T  P  T   -+
1604    {  1, 0, 0,99,99, 0, 0,99,99,99, 0, 3 }, // Trunc      -+
1605    {  8, 1, 9,99,99, 2, 0,99,99,99, 2, 3 }, // ZExt        |
1606    {  8, 0, 1,99,99, 0, 2,99,99,99, 0, 3 }, // SExt        |
1607    {  0, 0, 0,99,99, 0, 0,99,99,99, 0, 3 }, // FPToUI      |
1608    {  0, 0, 0,99,99, 0, 0,99,99,99, 0, 3 }, // FPToSI      |
1609    { 99,99,99, 0, 0,99,99, 0, 0,99,99, 4 }, // UIToFP      +- firstOp
1610    { 99,99,99, 0, 0,99,99, 0, 0,99,99, 4 }, // SIToFP      |
1611    { 99,99,99, 0, 0,99,99, 1, 0,99,99, 4 }, // FPTrunc     |
1612    { 99,99,99, 2, 2,99,99,10, 2,99,99, 4 }, // FPExt       |
1613    {  1, 0, 0,99,99, 0, 0,99,99,99, 7, 3 }, // PtrToInt    |
1614    { 99,99,99,99,99,99,99,99,99,13,99,12 }, // IntToPtr    |
1615    {  5, 5, 5, 6, 6, 5, 5, 6, 6,11, 5, 1 }, // BitCast    -+
1616  };
1617
1618  int ElimCase = CastResults[firstOp-Instruction::CastOpsBegin]
1619                            [secondOp-Instruction::CastOpsBegin];
1620  switch (ElimCase) {
1621    case 0:
1622      // categorically disallowed
1623      return 0;
1624    case 1:
1625      // allowed, use first cast's opcode
1626      return firstOp;
1627    case 2:
1628      // allowed, use second cast's opcode
1629      return secondOp;
1630    case 3:
1631      // no-op cast in second op implies firstOp as long as the DestTy
1632      // is integer
1633      if (DstTy->isInteger())
1634        return firstOp;
1635      return 0;
1636    case 4:
1637      // no-op cast in second op implies firstOp as long as the DestTy
1638      // is floating point
1639      if (DstTy->isFloatingPoint())
1640        return firstOp;
1641      return 0;
1642    case 5:
1643      // no-op cast in first op implies secondOp as long as the SrcTy
1644      // is an integer
1645      if (SrcTy->isInteger())
1646        return secondOp;
1647      return 0;
1648    case 6:
1649      // no-op cast in first op implies secondOp as long as the SrcTy
1650      // is a floating point
1651      if (SrcTy->isFloatingPoint())
1652        return secondOp;
1653      return 0;
1654    case 7: {
1655      // ptrtoint, inttoptr -> bitcast (ptr -> ptr) if int size is >= ptr size
1656      unsigned PtrSize = IntPtrTy->getPrimitiveSizeInBits();
1657      unsigned MidSize = MidTy->getPrimitiveSizeInBits();
1658      if (MidSize >= PtrSize)
1659        return Instruction::BitCast;
1660      return 0;
1661    }
1662    case 8: {
1663      // ext, trunc -> bitcast,    if the SrcTy and DstTy are same size
1664      // ext, trunc -> ext,        if sizeof(SrcTy) < sizeof(DstTy)
1665      // ext, trunc -> trunc,      if sizeof(SrcTy) > sizeof(DstTy)
1666      unsigned SrcSize = SrcTy->getPrimitiveSizeInBits();
1667      unsigned DstSize = DstTy->getPrimitiveSizeInBits();
1668      if (SrcSize == DstSize)
1669        return Instruction::BitCast;
1670      else if (SrcSize < DstSize)
1671        return firstOp;
1672      return secondOp;
1673    }
1674    case 9: // zext, sext -> zext, because sext can't sign extend after zext
1675      return Instruction::ZExt;
1676    case 10:
1677      // fpext followed by ftrunc is allowed if the bit size returned to is
1678      // the same as the original, in which case its just a bitcast
1679      if (SrcTy == DstTy)
1680        return Instruction::BitCast;
1681      return 0; // If the types are not the same we can't eliminate it.
1682    case 11:
1683      // bitcast followed by ptrtoint is allowed as long as the bitcast
1684      // is a pointer to pointer cast.
1685      if (isa<PointerType>(SrcTy) && isa<PointerType>(MidTy))
1686        return secondOp;
1687      return 0;
1688    case 12:
1689      // inttoptr, bitcast -> intptr  if bitcast is a ptr to ptr cast
1690      if (isa<PointerType>(MidTy) && isa<PointerType>(DstTy))
1691        return firstOp;
1692      return 0;
1693    case 13: {
1694      // inttoptr, ptrtoint -> bitcast if SrcSize<=PtrSize and SrcSize==DstSize
1695      unsigned PtrSize = IntPtrTy->getPrimitiveSizeInBits();
1696      unsigned SrcSize = SrcTy->getPrimitiveSizeInBits();
1697      unsigned DstSize = DstTy->getPrimitiveSizeInBits();
1698      if (SrcSize <= PtrSize && SrcSize == DstSize)
1699        return Instruction::BitCast;
1700      return 0;
1701    }
1702    case 99:
1703      // cast combination can't happen (error in input). This is for all cases
1704      // where the MidTy is not the same for the two cast instructions.
1705      assert(!"Invalid Cast Combination");
1706      return 0;
1707    default:
1708      assert(!"Error in CastResults table!!!");
1709      return 0;
1710  }
1711  return 0;
1712}
1713
1714CastInst *CastInst::create(Instruction::CastOps op, Value *S, const Type *Ty,
1715  const std::string &Name, Instruction *InsertBefore) {
1716  // Construct and return the appropriate CastInst subclass
1717  switch (op) {
1718    case Trunc:    return new TruncInst    (S, Ty, Name, InsertBefore);
1719    case ZExt:     return new ZExtInst     (S, Ty, Name, InsertBefore);
1720    case SExt:     return new SExtInst     (S, Ty, Name, InsertBefore);
1721    case FPTrunc:  return new FPTruncInst  (S, Ty, Name, InsertBefore);
1722    case FPExt:    return new FPExtInst    (S, Ty, Name, InsertBefore);
1723    case UIToFP:   return new UIToFPInst   (S, Ty, Name, InsertBefore);
1724    case SIToFP:   return new SIToFPInst   (S, Ty, Name, InsertBefore);
1725    case FPToUI:   return new FPToUIInst   (S, Ty, Name, InsertBefore);
1726    case FPToSI:   return new FPToSIInst   (S, Ty, Name, InsertBefore);
1727    case PtrToInt: return new PtrToIntInst (S, Ty, Name, InsertBefore);
1728    case IntToPtr: return new IntToPtrInst (S, Ty, Name, InsertBefore);
1729    case BitCast:  return new BitCastInst  (S, Ty, Name, InsertBefore);
1730    default:
1731      assert(!"Invalid opcode provided");
1732  }
1733  return 0;
1734}
1735
1736CastInst *CastInst::create(Instruction::CastOps op, Value *S, const Type *Ty,
1737  const std::string &Name, BasicBlock *InsertAtEnd) {
1738  // Construct and return the appropriate CastInst subclass
1739  switch (op) {
1740    case Trunc:    return new TruncInst    (S, Ty, Name, InsertAtEnd);
1741    case ZExt:     return new ZExtInst     (S, Ty, Name, InsertAtEnd);
1742    case SExt:     return new SExtInst     (S, Ty, Name, InsertAtEnd);
1743    case FPTrunc:  return new FPTruncInst  (S, Ty, Name, InsertAtEnd);
1744    case FPExt:    return new FPExtInst    (S, Ty, Name, InsertAtEnd);
1745    case UIToFP:   return new UIToFPInst   (S, Ty, Name, InsertAtEnd);
1746    case SIToFP:   return new SIToFPInst   (S, Ty, Name, InsertAtEnd);
1747    case FPToUI:   return new FPToUIInst   (S, Ty, Name, InsertAtEnd);
1748    case FPToSI:   return new FPToSIInst   (S, Ty, Name, InsertAtEnd);
1749    case PtrToInt: return new PtrToIntInst (S, Ty, Name, InsertAtEnd);
1750    case IntToPtr: return new IntToPtrInst (S, Ty, Name, InsertAtEnd);
1751    case BitCast:  return new BitCastInst  (S, Ty, Name, InsertAtEnd);
1752    default:
1753      assert(!"Invalid opcode provided");
1754  }
1755  return 0;
1756}
1757
1758CastInst *CastInst::createZExtOrBitCast(Value *S, const Type *Ty,
1759                                        const std::string &Name,
1760                                        Instruction *InsertBefore) {
1761  if (S->getType()->getPrimitiveSizeInBits() == Ty->getPrimitiveSizeInBits())
1762    return create(Instruction::BitCast, S, Ty, Name, InsertBefore);
1763  return create(Instruction::ZExt, S, Ty, Name, InsertBefore);
1764}
1765
1766CastInst *CastInst::createZExtOrBitCast(Value *S, const Type *Ty,
1767                                        const std::string &Name,
1768                                        BasicBlock *InsertAtEnd) {
1769  if (S->getType()->getPrimitiveSizeInBits() == Ty->getPrimitiveSizeInBits())
1770    return create(Instruction::BitCast, S, Ty, Name, InsertAtEnd);
1771  return create(Instruction::ZExt, S, Ty, Name, InsertAtEnd);
1772}
1773
1774CastInst *CastInst::createSExtOrBitCast(Value *S, const Type *Ty,
1775                                        const std::string &Name,
1776                                        Instruction *InsertBefore) {
1777  if (S->getType()->getPrimitiveSizeInBits() == Ty->getPrimitiveSizeInBits())
1778    return create(Instruction::BitCast, S, Ty, Name, InsertBefore);
1779  return create(Instruction::SExt, S, Ty, Name, InsertBefore);
1780}
1781
1782CastInst *CastInst::createSExtOrBitCast(Value *S, const Type *Ty,
1783                                        const std::string &Name,
1784                                        BasicBlock *InsertAtEnd) {
1785  if (S->getType()->getPrimitiveSizeInBits() == Ty->getPrimitiveSizeInBits())
1786    return create(Instruction::BitCast, S, Ty, Name, InsertAtEnd);
1787  return create(Instruction::SExt, S, Ty, Name, InsertAtEnd);
1788}
1789
1790CastInst *CastInst::createTruncOrBitCast(Value *S, const Type *Ty,
1791                                         const std::string &Name,
1792                                         Instruction *InsertBefore) {
1793  if (S->getType()->getPrimitiveSizeInBits() == Ty->getPrimitiveSizeInBits())
1794    return create(Instruction::BitCast, S, Ty, Name, InsertBefore);
1795  return create(Instruction::Trunc, S, Ty, Name, InsertBefore);
1796}
1797
1798CastInst *CastInst::createTruncOrBitCast(Value *S, const Type *Ty,
1799                                         const std::string &Name,
1800                                         BasicBlock *InsertAtEnd) {
1801  if (S->getType()->getPrimitiveSizeInBits() == Ty->getPrimitiveSizeInBits())
1802    return create(Instruction::BitCast, S, Ty, Name, InsertAtEnd);
1803  return create(Instruction::Trunc, S, Ty, Name, InsertAtEnd);
1804}
1805
1806CastInst *CastInst::createPointerCast(Value *S, const Type *Ty,
1807                                      const std::string &Name,
1808                                      BasicBlock *InsertAtEnd) {
1809  assert(isa<PointerType>(S->getType()) && "Invalid cast");
1810  assert((Ty->isInteger() || isa<PointerType>(Ty)) &&
1811         "Invalid cast");
1812
1813  if (Ty->isInteger())
1814    return create(Instruction::PtrToInt, S, Ty, Name, InsertAtEnd);
1815  return create(Instruction::BitCast, S, Ty, Name, InsertAtEnd);
1816}
1817
1818/// @brief Create a BitCast or a PtrToInt cast instruction
1819CastInst *CastInst::createPointerCast(Value *S, const Type *Ty,
1820                                      const std::string &Name,
1821                                      Instruction *InsertBefore) {
1822  assert(isa<PointerType>(S->getType()) && "Invalid cast");
1823  assert((Ty->isInteger() || isa<PointerType>(Ty)) &&
1824         "Invalid cast");
1825
1826  if (Ty->isInteger())
1827    return create(Instruction::PtrToInt, S, Ty, Name, InsertBefore);
1828  return create(Instruction::BitCast, S, Ty, Name, InsertBefore);
1829}
1830
1831CastInst *CastInst::createIntegerCast(Value *C, const Type *Ty,
1832                                      bool isSigned, const std::string &Name,
1833                                      Instruction *InsertBefore) {
1834  assert(C->getType()->isInteger() && Ty->isInteger() && "Invalid cast");
1835  unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
1836  unsigned DstBits = Ty->getPrimitiveSizeInBits();
1837  Instruction::CastOps opcode =
1838    (SrcBits == DstBits ? Instruction::BitCast :
1839     (SrcBits > DstBits ? Instruction::Trunc :
1840      (isSigned ? Instruction::SExt : Instruction::ZExt)));
1841  return create(opcode, C, Ty, Name, InsertBefore);
1842}
1843
1844CastInst *CastInst::createIntegerCast(Value *C, const Type *Ty,
1845                                      bool isSigned, const std::string &Name,
1846                                      BasicBlock *InsertAtEnd) {
1847  assert(C->getType()->isInteger() && Ty->isInteger() && "Invalid cast");
1848  unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
1849  unsigned DstBits = Ty->getPrimitiveSizeInBits();
1850  Instruction::CastOps opcode =
1851    (SrcBits == DstBits ? Instruction::BitCast :
1852     (SrcBits > DstBits ? Instruction::Trunc :
1853      (isSigned ? Instruction::SExt : Instruction::ZExt)));
1854  return create(opcode, C, Ty, Name, InsertAtEnd);
1855}
1856
1857CastInst *CastInst::createFPCast(Value *C, const Type *Ty,
1858                                 const std::string &Name,
1859                                 Instruction *InsertBefore) {
1860  assert(C->getType()->isFloatingPoint() && Ty->isFloatingPoint() &&
1861         "Invalid cast");
1862  unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
1863  unsigned DstBits = Ty->getPrimitiveSizeInBits();
1864  Instruction::CastOps opcode =
1865    (SrcBits == DstBits ? Instruction::BitCast :
1866     (SrcBits > DstBits ? Instruction::FPTrunc : Instruction::FPExt));
1867  return create(opcode, C, Ty, Name, InsertBefore);
1868}
1869
1870CastInst *CastInst::createFPCast(Value *C, const Type *Ty,
1871                                 const std::string &Name,
1872                                 BasicBlock *InsertAtEnd) {
1873  assert(C->getType()->isFloatingPoint() && Ty->isFloatingPoint() &&
1874         "Invalid cast");
1875  unsigned SrcBits = C->getType()->getPrimitiveSizeInBits();
1876  unsigned DstBits = Ty->getPrimitiveSizeInBits();
1877  Instruction::CastOps opcode =
1878    (SrcBits == DstBits ? Instruction::BitCast :
1879     (SrcBits > DstBits ? Instruction::FPTrunc : Instruction::FPExt));
1880  return create(opcode, C, Ty, Name, InsertAtEnd);
1881}
1882
1883// Provide a way to get a "cast" where the cast opcode is inferred from the
1884// types and size of the operand. This, basically, is a parallel of the
1885// logic in the castIsValid function below.  This axiom should hold:
1886//   castIsValid( getCastOpcode(Val, Ty), Val, Ty)
1887// should not assert in castIsValid. In other words, this produces a "correct"
1888// casting opcode for the arguments passed to it.
1889Instruction::CastOps
1890CastInst::getCastOpcode(
1891  const Value *Src, bool SrcIsSigned, const Type *DestTy, bool DestIsSigned) {
1892  // Get the bit sizes, we'll need these
1893  const Type *SrcTy = Src->getType();
1894  unsigned SrcBits = SrcTy->getPrimitiveSizeInBits();   // 0 for ptr/vector
1895  unsigned DestBits = DestTy->getPrimitiveSizeInBits(); // 0 for ptr/vector
1896
1897  // Run through the possibilities ...
1898  if (DestTy->isInteger()) {                       // Casting to integral
1899    if (SrcTy->isInteger()) {                      // Casting from integral
1900      if (DestBits < SrcBits)
1901        return Trunc;                               // int -> smaller int
1902      else if (DestBits > SrcBits) {                // its an extension
1903        if (SrcIsSigned)
1904          return SExt;                              // signed -> SEXT
1905        else
1906          return ZExt;                              // unsigned -> ZEXT
1907      } else {
1908        return BitCast;                             // Same size, No-op cast
1909      }
1910    } else if (SrcTy->isFloatingPoint()) {          // Casting from floating pt
1911      if (DestIsSigned)
1912        return FPToSI;                              // FP -> sint
1913      else
1914        return FPToUI;                              // FP -> uint
1915    } else if (const VectorType *PTy = dyn_cast<VectorType>(SrcTy)) {
1916      assert(DestBits == PTy->getBitWidth() &&
1917               "Casting vector to integer of different width");
1918      return BitCast;                             // Same size, no-op cast
1919    } else {
1920      assert(isa<PointerType>(SrcTy) &&
1921             "Casting from a value that is not first-class type");
1922      return PtrToInt;                              // ptr -> int
1923    }
1924  } else if (DestTy->isFloatingPoint()) {           // Casting to floating pt
1925    if (SrcTy->isInteger()) {                      // Casting from integral
1926      if (SrcIsSigned)
1927        return SIToFP;                              // sint -> FP
1928      else
1929        return UIToFP;                              // uint -> FP
1930    } else if (SrcTy->isFloatingPoint()) {          // Casting from floating pt
1931      if (DestBits < SrcBits) {
1932        return FPTrunc;                             // FP -> smaller FP
1933      } else if (DestBits > SrcBits) {
1934        return FPExt;                               // FP -> larger FP
1935      } else  {
1936        return BitCast;                             // same size, no-op cast
1937      }
1938    } else if (const VectorType *PTy = dyn_cast<VectorType>(SrcTy)) {
1939      assert(DestBits == PTy->getBitWidth() &&
1940             "Casting vector to floating point of different width");
1941        return BitCast;                             // same size, no-op cast
1942    } else {
1943      assert(0 && "Casting pointer or non-first class to float");
1944    }
1945  } else if (const VectorType *DestPTy = dyn_cast<VectorType>(DestTy)) {
1946    if (const VectorType *SrcPTy = dyn_cast<VectorType>(SrcTy)) {
1947      assert(DestPTy->getBitWidth() == SrcPTy->getBitWidth() &&
1948             "Casting vector to vector of different widths");
1949      return BitCast;                             // vector -> vector
1950    } else if (DestPTy->getBitWidth() == SrcBits) {
1951      return BitCast;                               // float/int -> vector
1952    } else {
1953      assert(!"Illegal cast to vector (wrong type or size)");
1954    }
1955  } else if (isa<PointerType>(DestTy)) {
1956    if (isa<PointerType>(SrcTy)) {
1957      return BitCast;                               // ptr -> ptr
1958    } else if (SrcTy->isInteger()) {
1959      return IntToPtr;                              // int -> ptr
1960    } else {
1961      assert(!"Casting pointer to other than pointer or int");
1962    }
1963  } else {
1964    assert(!"Casting to type that is not first-class");
1965  }
1966
1967  // If we fall through to here we probably hit an assertion cast above
1968  // and assertions are not turned on. Anything we return is an error, so
1969  // BitCast is as good a choice as any.
1970  return BitCast;
1971}
1972
1973//===----------------------------------------------------------------------===//
1974//                    CastInst SubClass Constructors
1975//===----------------------------------------------------------------------===//
1976
1977/// Check that the construction parameters for a CastInst are correct. This
1978/// could be broken out into the separate constructors but it is useful to have
1979/// it in one place and to eliminate the redundant code for getting the sizes
1980/// of the types involved.
1981bool
1982CastInst::castIsValid(Instruction::CastOps op, Value *S, const Type *DstTy) {
1983
1984  // Check for type sanity on the arguments
1985  const Type *SrcTy = S->getType();
1986  if (!SrcTy->isFirstClassType() || !DstTy->isFirstClassType())
1987    return false;
1988
1989  // Get the size of the types in bits, we'll need this later
1990  unsigned SrcBitSize = SrcTy->getPrimitiveSizeInBits();
1991  unsigned DstBitSize = DstTy->getPrimitiveSizeInBits();
1992
1993  // Switch on the opcode provided
1994  switch (op) {
1995  default: return false; // This is an input error
1996  case Instruction::Trunc:
1997    return SrcTy->isInteger() && DstTy->isInteger()&& SrcBitSize > DstBitSize;
1998  case Instruction::ZExt:
1999    return SrcTy->isInteger() && DstTy->isInteger()&& SrcBitSize < DstBitSize;
2000  case Instruction::SExt:
2001    return SrcTy->isInteger() && DstTy->isInteger()&& SrcBitSize < DstBitSize;
2002  case Instruction::FPTrunc:
2003    return SrcTy->isFloatingPoint() && DstTy->isFloatingPoint() &&
2004      SrcBitSize > DstBitSize;
2005  case Instruction::FPExt:
2006    return SrcTy->isFloatingPoint() && DstTy->isFloatingPoint() &&
2007      SrcBitSize < DstBitSize;
2008  case Instruction::UIToFP:
2009    return SrcTy->isInteger() && DstTy->isFloatingPoint();
2010  case Instruction::SIToFP:
2011    return SrcTy->isInteger() && DstTy->isFloatingPoint();
2012  case Instruction::FPToUI:
2013    return SrcTy->isFloatingPoint() && DstTy->isInteger();
2014  case Instruction::FPToSI:
2015    return SrcTy->isFloatingPoint() && DstTy->isInteger();
2016  case Instruction::PtrToInt:
2017    return isa<PointerType>(SrcTy) && DstTy->isInteger();
2018  case Instruction::IntToPtr:
2019    return SrcTy->isInteger() && isa<PointerType>(DstTy);
2020  case Instruction::BitCast:
2021    // BitCast implies a no-op cast of type only. No bits change.
2022    // However, you can't cast pointers to anything but pointers.
2023    if (isa<PointerType>(SrcTy) != isa<PointerType>(DstTy))
2024      return false;
2025
2026    // Now we know we're not dealing with a pointer/non-poiner mismatch. In all
2027    // these cases, the cast is okay if the source and destination bit widths
2028    // are identical.
2029    return SrcBitSize == DstBitSize;
2030  }
2031}
2032
2033TruncInst::TruncInst(
2034  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2035) : CastInst(Ty, Trunc, S, Name, InsertBefore) {
2036  assert(castIsValid(getOpcode(), S, Ty) && "Illegal Trunc");
2037}
2038
2039TruncInst::TruncInst(
2040  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2041) : CastInst(Ty, Trunc, S, Name, InsertAtEnd) {
2042  assert(castIsValid(getOpcode(), S, Ty) && "Illegal Trunc");
2043}
2044
2045ZExtInst::ZExtInst(
2046  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2047)  : CastInst(Ty, ZExt, S, Name, InsertBefore) {
2048  assert(castIsValid(getOpcode(), S, Ty) && "Illegal ZExt");
2049}
2050
2051ZExtInst::ZExtInst(
2052  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2053)  : CastInst(Ty, ZExt, S, Name, InsertAtEnd) {
2054  assert(castIsValid(getOpcode(), S, Ty) && "Illegal ZExt");
2055}
2056SExtInst::SExtInst(
2057  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2058) : CastInst(Ty, SExt, S, Name, InsertBefore) {
2059  assert(castIsValid(getOpcode(), S, Ty) && "Illegal SExt");
2060}
2061
2062SExtInst::SExtInst(
2063  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2064)  : CastInst(Ty, SExt, S, Name, InsertAtEnd) {
2065  assert(castIsValid(getOpcode(), S, Ty) && "Illegal SExt");
2066}
2067
2068FPTruncInst::FPTruncInst(
2069  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2070) : CastInst(Ty, FPTrunc, S, Name, InsertBefore) {
2071  assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPTrunc");
2072}
2073
2074FPTruncInst::FPTruncInst(
2075  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2076) : CastInst(Ty, FPTrunc, S, Name, InsertAtEnd) {
2077  assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPTrunc");
2078}
2079
2080FPExtInst::FPExtInst(
2081  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2082) : CastInst(Ty, FPExt, S, Name, InsertBefore) {
2083  assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPExt");
2084}
2085
2086FPExtInst::FPExtInst(
2087  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2088) : CastInst(Ty, FPExt, S, Name, InsertAtEnd) {
2089  assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPExt");
2090}
2091
2092UIToFPInst::UIToFPInst(
2093  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2094) : CastInst(Ty, UIToFP, S, Name, InsertBefore) {
2095  assert(castIsValid(getOpcode(), S, Ty) && "Illegal UIToFP");
2096}
2097
2098UIToFPInst::UIToFPInst(
2099  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2100) : CastInst(Ty, UIToFP, S, Name, InsertAtEnd) {
2101  assert(castIsValid(getOpcode(), S, Ty) && "Illegal UIToFP");
2102}
2103
2104SIToFPInst::SIToFPInst(
2105  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2106) : CastInst(Ty, SIToFP, S, Name, InsertBefore) {
2107  assert(castIsValid(getOpcode(), S, Ty) && "Illegal SIToFP");
2108}
2109
2110SIToFPInst::SIToFPInst(
2111  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2112) : CastInst(Ty, SIToFP, S, Name, InsertAtEnd) {
2113  assert(castIsValid(getOpcode(), S, Ty) && "Illegal SIToFP");
2114}
2115
2116FPToUIInst::FPToUIInst(
2117  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2118) : CastInst(Ty, FPToUI, S, Name, InsertBefore) {
2119  assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPToUI");
2120}
2121
2122FPToUIInst::FPToUIInst(
2123  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2124) : CastInst(Ty, FPToUI, S, Name, InsertAtEnd) {
2125  assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPToUI");
2126}
2127
2128FPToSIInst::FPToSIInst(
2129  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2130) : CastInst(Ty, FPToSI, S, Name, InsertBefore) {
2131  assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPToSI");
2132}
2133
2134FPToSIInst::FPToSIInst(
2135  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2136) : CastInst(Ty, FPToSI, S, Name, InsertAtEnd) {
2137  assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPToSI");
2138}
2139
2140PtrToIntInst::PtrToIntInst(
2141  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2142) : CastInst(Ty, PtrToInt, S, Name, InsertBefore) {
2143  assert(castIsValid(getOpcode(), S, Ty) && "Illegal PtrToInt");
2144}
2145
2146PtrToIntInst::PtrToIntInst(
2147  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2148) : CastInst(Ty, PtrToInt, S, Name, InsertAtEnd) {
2149  assert(castIsValid(getOpcode(), S, Ty) && "Illegal PtrToInt");
2150}
2151
2152IntToPtrInst::IntToPtrInst(
2153  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2154) : CastInst(Ty, IntToPtr, S, Name, InsertBefore) {
2155  assert(castIsValid(getOpcode(), S, Ty) && "Illegal IntToPtr");
2156}
2157
2158IntToPtrInst::IntToPtrInst(
2159  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2160) : CastInst(Ty, IntToPtr, S, Name, InsertAtEnd) {
2161  assert(castIsValid(getOpcode(), S, Ty) && "Illegal IntToPtr");
2162}
2163
2164BitCastInst::BitCastInst(
2165  Value *S, const Type *Ty, const std::string &Name, Instruction *InsertBefore
2166) : CastInst(Ty, BitCast, S, Name, InsertBefore) {
2167  assert(castIsValid(getOpcode(), S, Ty) && "Illegal BitCast");
2168}
2169
2170BitCastInst::BitCastInst(
2171  Value *S, const Type *Ty, const std::string &Name, BasicBlock *InsertAtEnd
2172) : CastInst(Ty, BitCast, S, Name, InsertAtEnd) {
2173  assert(castIsValid(getOpcode(), S, Ty) && "Illegal BitCast");
2174}
2175
2176//===----------------------------------------------------------------------===//
2177//                               CmpInst Classes
2178//===----------------------------------------------------------------------===//
2179
2180CmpInst::CmpInst(OtherOps op, unsigned short predicate, Value *LHS, Value *RHS,
2181                 const std::string &Name, Instruction *InsertBefore)
2182  : Instruction(Type::Int1Ty, op, Ops, 2, InsertBefore) {
2183    Ops[0].init(LHS, this);
2184    Ops[1].init(RHS, this);
2185  SubclassData = predicate;
2186  setName(Name);
2187  if (op == Instruction::ICmp) {
2188    assert(predicate >= ICmpInst::FIRST_ICMP_PREDICATE &&
2189           predicate <= ICmpInst::LAST_ICMP_PREDICATE &&
2190           "Invalid ICmp predicate value");
2191    const Type* Op0Ty = getOperand(0)->getType();
2192    const Type* Op1Ty = getOperand(1)->getType();
2193    assert(Op0Ty == Op1Ty &&
2194           "Both operands to ICmp instruction are not of the same type!");
2195    // Check that the operands are the right type
2196    assert((Op0Ty->isInteger() || isa<PointerType>(Op0Ty)) &&
2197           "Invalid operand types for ICmp instruction");
2198    return;
2199  }
2200  assert(op == Instruction::FCmp && "Invalid CmpInst opcode");
2201  assert(predicate <= FCmpInst::LAST_FCMP_PREDICATE &&
2202         "Invalid FCmp predicate value");
2203  const Type* Op0Ty = getOperand(0)->getType();
2204  const Type* Op1Ty = getOperand(1)->getType();
2205  assert(Op0Ty == Op1Ty &&
2206         "Both operands to FCmp instruction are not of the same type!");
2207  // Check that the operands are the right type
2208  assert(Op0Ty->isFloatingPoint() &&
2209         "Invalid operand types for FCmp instruction");
2210}
2211
2212CmpInst::CmpInst(OtherOps op, unsigned short predicate, Value *LHS, Value *RHS,
2213                 const std::string &Name, BasicBlock *InsertAtEnd)
2214  : Instruction(Type::Int1Ty, op, Ops, 2, InsertAtEnd) {
2215  Ops[0].init(LHS, this);
2216  Ops[1].init(RHS, this);
2217  SubclassData = predicate;
2218  setName(Name);
2219  if (op == Instruction::ICmp) {
2220    assert(predicate >= ICmpInst::FIRST_ICMP_PREDICATE &&
2221           predicate <= ICmpInst::LAST_ICMP_PREDICATE &&
2222           "Invalid ICmp predicate value");
2223
2224    const Type* Op0Ty = getOperand(0)->getType();
2225    const Type* Op1Ty = getOperand(1)->getType();
2226    assert(Op0Ty == Op1Ty &&
2227          "Both operands to ICmp instruction are not of the same type!");
2228    // Check that the operands are the right type
2229    assert(Op0Ty->isInteger() || isa<PointerType>(Op0Ty) &&
2230           "Invalid operand types for ICmp instruction");
2231    return;
2232  }
2233  assert(op == Instruction::FCmp && "Invalid CmpInst opcode");
2234  assert(predicate <= FCmpInst::LAST_FCMP_PREDICATE &&
2235         "Invalid FCmp predicate value");
2236  const Type* Op0Ty = getOperand(0)->getType();
2237  const Type* Op1Ty = getOperand(1)->getType();
2238  assert(Op0Ty == Op1Ty &&
2239          "Both operands to FCmp instruction are not of the same type!");
2240  // Check that the operands are the right type
2241  assert(Op0Ty->isFloatingPoint() &&
2242        "Invalid operand types for FCmp instruction");
2243}
2244
2245CmpInst *
2246CmpInst::create(OtherOps Op, unsigned short predicate, Value *S1, Value *S2,
2247                const std::string &Name, Instruction *InsertBefore) {
2248  if (Op == Instruction::ICmp) {
2249    return new ICmpInst(ICmpInst::Predicate(predicate), S1, S2, Name,
2250                        InsertBefore);
2251  }
2252  return new FCmpInst(FCmpInst::Predicate(predicate), S1, S2, Name,
2253                      InsertBefore);
2254}
2255
2256CmpInst *
2257CmpInst::create(OtherOps Op, unsigned short predicate, Value *S1, Value *S2,
2258                const std::string &Name, BasicBlock *InsertAtEnd) {
2259  if (Op == Instruction::ICmp) {
2260    return new ICmpInst(ICmpInst::Predicate(predicate), S1, S2, Name,
2261                        InsertAtEnd);
2262  }
2263  return new FCmpInst(FCmpInst::Predicate(predicate), S1, S2, Name,
2264                      InsertAtEnd);
2265}
2266
2267void CmpInst::swapOperands() {
2268  if (ICmpInst *IC = dyn_cast<ICmpInst>(this))
2269    IC->swapOperands();
2270  else
2271    cast<FCmpInst>(this)->swapOperands();
2272}
2273
2274bool CmpInst::isCommutative() {
2275  if (ICmpInst *IC = dyn_cast<ICmpInst>(this))
2276    return IC->isCommutative();
2277  return cast<FCmpInst>(this)->isCommutative();
2278}
2279
2280bool CmpInst::isEquality() {
2281  if (ICmpInst *IC = dyn_cast<ICmpInst>(this))
2282    return IC->isEquality();
2283  return cast<FCmpInst>(this)->isEquality();
2284}
2285
2286
2287ICmpInst::Predicate ICmpInst::getInversePredicate(Predicate pred) {
2288  switch (pred) {
2289    default:
2290      assert(!"Unknown icmp predicate!");
2291    case ICMP_EQ: return ICMP_NE;
2292    case ICMP_NE: return ICMP_EQ;
2293    case ICMP_UGT: return ICMP_ULE;
2294    case ICMP_ULT: return ICMP_UGE;
2295    case ICMP_UGE: return ICMP_ULT;
2296    case ICMP_ULE: return ICMP_UGT;
2297    case ICMP_SGT: return ICMP_SLE;
2298    case ICMP_SLT: return ICMP_SGE;
2299    case ICMP_SGE: return ICMP_SLT;
2300    case ICMP_SLE: return ICMP_SGT;
2301  }
2302}
2303
2304ICmpInst::Predicate ICmpInst::getSwappedPredicate(Predicate pred) {
2305  switch (pred) {
2306    default: assert(! "Unknown icmp predicate!");
2307    case ICMP_EQ: case ICMP_NE:
2308      return pred;
2309    case ICMP_SGT: return ICMP_SLT;
2310    case ICMP_SLT: return ICMP_SGT;
2311    case ICMP_SGE: return ICMP_SLE;
2312    case ICMP_SLE: return ICMP_SGE;
2313    case ICMP_UGT: return ICMP_ULT;
2314    case ICMP_ULT: return ICMP_UGT;
2315    case ICMP_UGE: return ICMP_ULE;
2316    case ICMP_ULE: return ICMP_UGE;
2317  }
2318}
2319
2320ICmpInst::Predicate ICmpInst::getSignedPredicate(Predicate pred) {
2321  switch (pred) {
2322    default: assert(! "Unknown icmp predicate!");
2323    case ICMP_EQ: case ICMP_NE:
2324    case ICMP_SGT: case ICMP_SLT: case ICMP_SGE: case ICMP_SLE:
2325       return pred;
2326    case ICMP_UGT: return ICMP_SGT;
2327    case ICMP_ULT: return ICMP_SLT;
2328    case ICMP_UGE: return ICMP_SGE;
2329    case ICMP_ULE: return ICMP_SLE;
2330  }
2331}
2332
2333bool ICmpInst::isSignedPredicate(Predicate pred) {
2334  switch (pred) {
2335    default: assert(! "Unknown icmp predicate!");
2336    case ICMP_SGT: case ICMP_SLT: case ICMP_SGE: case ICMP_SLE:
2337      return true;
2338    case ICMP_EQ:  case ICMP_NE: case ICMP_UGT: case ICMP_ULT:
2339    case ICMP_UGE: case ICMP_ULE:
2340      return false;
2341  }
2342}
2343
2344/// Initialize a set of values that all satisfy the condition with C.
2345///
2346ConstantRange
2347ICmpInst::makeConstantRange(Predicate pred, const APInt &C) {
2348  APInt Lower(C);
2349  APInt Upper(C);
2350  uint32_t BitWidth = C.getBitWidth();
2351  switch (pred) {
2352  default: assert(0 && "Invalid ICmp opcode to ConstantRange ctor!");
2353  case ICmpInst::ICMP_EQ: Upper++; break;
2354  case ICmpInst::ICMP_NE: Lower++; break;
2355  case ICmpInst::ICMP_ULT: Lower = APInt::getMinValue(BitWidth); break;
2356  case ICmpInst::ICMP_SLT: Lower = APInt::getSignedMinValue(BitWidth); break;
2357  case ICmpInst::ICMP_UGT:
2358    Lower++; Upper = APInt::getMinValue(BitWidth);        // Min = Next(Max)
2359    break;
2360  case ICmpInst::ICMP_SGT:
2361    Lower++; Upper = APInt::getSignedMinValue(BitWidth);  // Min = Next(Max)
2362    break;
2363  case ICmpInst::ICMP_ULE:
2364    Lower = APInt::getMinValue(BitWidth); Upper++;
2365    break;
2366  case ICmpInst::ICMP_SLE:
2367    Lower = APInt::getSignedMinValue(BitWidth); Upper++;
2368    break;
2369  case ICmpInst::ICMP_UGE:
2370    Upper = APInt::getMinValue(BitWidth);        // Min = Next(Max)
2371    break;
2372  case ICmpInst::ICMP_SGE:
2373    Upper = APInt::getSignedMinValue(BitWidth);  // Min = Next(Max)
2374    break;
2375  }
2376  return ConstantRange(Lower, Upper);
2377}
2378
2379FCmpInst::Predicate FCmpInst::getInversePredicate(Predicate pred) {
2380  switch (pred) {
2381    default:
2382      assert(!"Unknown icmp predicate!");
2383    case FCMP_OEQ: return FCMP_UNE;
2384    case FCMP_ONE: return FCMP_UEQ;
2385    case FCMP_OGT: return FCMP_ULE;
2386    case FCMP_OLT: return FCMP_UGE;
2387    case FCMP_OGE: return FCMP_ULT;
2388    case FCMP_OLE: return FCMP_UGT;
2389    case FCMP_UEQ: return FCMP_ONE;
2390    case FCMP_UNE: return FCMP_OEQ;
2391    case FCMP_UGT: return FCMP_OLE;
2392    case FCMP_ULT: return FCMP_OGE;
2393    case FCMP_UGE: return FCMP_OLT;
2394    case FCMP_ULE: return FCMP_OGT;
2395    case FCMP_ORD: return FCMP_UNO;
2396    case FCMP_UNO: return FCMP_ORD;
2397    case FCMP_TRUE: return FCMP_FALSE;
2398    case FCMP_FALSE: return FCMP_TRUE;
2399  }
2400}
2401
2402FCmpInst::Predicate FCmpInst::getSwappedPredicate(Predicate pred) {
2403  switch (pred) {
2404    default: assert(!"Unknown fcmp predicate!");
2405    case FCMP_FALSE: case FCMP_TRUE:
2406    case FCMP_OEQ: case FCMP_ONE:
2407    case FCMP_UEQ: case FCMP_UNE:
2408    case FCMP_ORD: case FCMP_UNO:
2409      return pred;
2410    case FCMP_OGT: return FCMP_OLT;
2411    case FCMP_OLT: return FCMP_OGT;
2412    case FCMP_OGE: return FCMP_OLE;
2413    case FCMP_OLE: return FCMP_OGE;
2414    case FCMP_UGT: return FCMP_ULT;
2415    case FCMP_ULT: return FCMP_UGT;
2416    case FCMP_UGE: return FCMP_ULE;
2417    case FCMP_ULE: return FCMP_UGE;
2418  }
2419}
2420
2421bool CmpInst::isUnsigned(unsigned short predicate) {
2422  switch (predicate) {
2423    default: return false;
2424    case ICmpInst::ICMP_ULT: case ICmpInst::ICMP_ULE: case ICmpInst::ICMP_UGT:
2425    case ICmpInst::ICMP_UGE: return true;
2426  }
2427}
2428
2429bool CmpInst::isSigned(unsigned short predicate){
2430  switch (predicate) {
2431    default: return false;
2432    case ICmpInst::ICMP_SLT: case ICmpInst::ICMP_SLE: case ICmpInst::ICMP_SGT:
2433    case ICmpInst::ICMP_SGE: return true;
2434  }
2435}
2436
2437bool CmpInst::isOrdered(unsigned short predicate) {
2438  switch (predicate) {
2439    default: return false;
2440    case FCmpInst::FCMP_OEQ: case FCmpInst::FCMP_ONE: case FCmpInst::FCMP_OGT:
2441    case FCmpInst::FCMP_OLT: case FCmpInst::FCMP_OGE: case FCmpInst::FCMP_OLE:
2442    case FCmpInst::FCMP_ORD: return true;
2443  }
2444}
2445
2446bool CmpInst::isUnordered(unsigned short predicate) {
2447  switch (predicate) {
2448    default: return false;
2449    case FCmpInst::FCMP_UEQ: case FCmpInst::FCMP_UNE: case FCmpInst::FCMP_UGT:
2450    case FCmpInst::FCMP_ULT: case FCmpInst::FCMP_UGE: case FCmpInst::FCMP_ULE:
2451    case FCmpInst::FCMP_UNO: return true;
2452  }
2453}
2454
2455//===----------------------------------------------------------------------===//
2456//                        SwitchInst Implementation
2457//===----------------------------------------------------------------------===//
2458
2459void SwitchInst::init(Value *Value, BasicBlock *Default, unsigned NumCases) {
2460  assert(Value && Default);
2461  ReservedSpace = 2+NumCases*2;
2462  NumOperands = 2;
2463  OperandList = new Use[ReservedSpace];
2464
2465  OperandList[0].init(Value, this);
2466  OperandList[1].init(Default, this);
2467}
2468
2469/// SwitchInst ctor - Create a new switch instruction, specifying a value to
2470/// switch on and a default destination.  The number of additional cases can
2471/// be specified here to make memory allocation more efficient.  This
2472/// constructor can also autoinsert before another instruction.
2473SwitchInst::SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
2474                       Instruction *InsertBefore)
2475  : TerminatorInst(Type::VoidTy, Instruction::Switch, 0, 0, InsertBefore) {
2476  init(Value, Default, NumCases);
2477}
2478
2479/// SwitchInst ctor - Create a new switch instruction, specifying a value to
2480/// switch on and a default destination.  The number of additional cases can
2481/// be specified here to make memory allocation more efficient.  This
2482/// constructor also autoinserts at the end of the specified BasicBlock.
2483SwitchInst::SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
2484                       BasicBlock *InsertAtEnd)
2485  : TerminatorInst(Type::VoidTy, Instruction::Switch, 0, 0, InsertAtEnd) {
2486  init(Value, Default, NumCases);
2487}
2488
2489SwitchInst::SwitchInst(const SwitchInst &SI)
2490  : TerminatorInst(Type::VoidTy, Instruction::Switch,
2491                   new Use[SI.getNumOperands()], SI.getNumOperands()) {
2492  Use *OL = OperandList, *InOL = SI.OperandList;
2493  for (unsigned i = 0, E = SI.getNumOperands(); i != E; i+=2) {
2494    OL[i].init(InOL[i], this);
2495    OL[i+1].init(InOL[i+1], this);
2496  }
2497}
2498
2499SwitchInst::~SwitchInst() {
2500  delete [] OperandList;
2501}
2502
2503
2504/// addCase - Add an entry to the switch instruction...
2505///
2506void SwitchInst::addCase(ConstantInt *OnVal, BasicBlock *Dest) {
2507  unsigned OpNo = NumOperands;
2508  if (OpNo+2 > ReservedSpace)
2509    resizeOperands(0);  // Get more space!
2510  // Initialize some new operands.
2511  assert(OpNo+1 < ReservedSpace && "Growing didn't work!");
2512  NumOperands = OpNo+2;
2513  OperandList[OpNo].init(OnVal, this);
2514  OperandList[OpNo+1].init(Dest, this);
2515}
2516
2517/// removeCase - This method removes the specified successor from the switch
2518/// instruction.  Note that this cannot be used to remove the default
2519/// destination (successor #0).
2520///
2521void SwitchInst::removeCase(unsigned idx) {
2522  assert(idx != 0 && "Cannot remove the default case!");
2523  assert(idx*2 < getNumOperands() && "Successor index out of range!!!");
2524
2525  unsigned NumOps = getNumOperands();
2526  Use *OL = OperandList;
2527
2528  // Move everything after this operand down.
2529  //
2530  // FIXME: we could just swap with the end of the list, then erase.  However,
2531  // client might not expect this to happen.  The code as it is thrashes the
2532  // use/def lists, which is kinda lame.
2533  for (unsigned i = (idx+1)*2; i != NumOps; i += 2) {
2534    OL[i-2] = OL[i];
2535    OL[i-2+1] = OL[i+1];
2536  }
2537
2538  // Nuke the last value.
2539  OL[NumOps-2].set(0);
2540  OL[NumOps-2+1].set(0);
2541  NumOperands = NumOps-2;
2542}
2543
2544/// resizeOperands - resize operands - This adjusts the length of the operands
2545/// list according to the following behavior:
2546///   1. If NumOps == 0, grow the operand list in response to a push_back style
2547///      of operation.  This grows the number of ops by 1.5 times.
2548///   2. If NumOps > NumOperands, reserve space for NumOps operands.
2549///   3. If NumOps == NumOperands, trim the reserved space.
2550///
2551void SwitchInst::resizeOperands(unsigned NumOps) {
2552  if (NumOps == 0) {
2553    NumOps = getNumOperands()/2*6;
2554  } else if (NumOps*2 > NumOperands) {
2555    // No resize needed.
2556    if (ReservedSpace >= NumOps) return;
2557  } else if (NumOps == NumOperands) {
2558    if (ReservedSpace == NumOps) return;
2559  } else {
2560    return;
2561  }
2562
2563  ReservedSpace = NumOps;
2564  Use *NewOps = new Use[NumOps];
2565  Use *OldOps = OperandList;
2566  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
2567      NewOps[i].init(OldOps[i], this);
2568      OldOps[i].set(0);
2569  }
2570  delete [] OldOps;
2571  OperandList = NewOps;
2572}
2573
2574
2575BasicBlock *SwitchInst::getSuccessorV(unsigned idx) const {
2576  return getSuccessor(idx);
2577}
2578unsigned SwitchInst::getNumSuccessorsV() const {
2579  return getNumSuccessors();
2580}
2581void SwitchInst::setSuccessorV(unsigned idx, BasicBlock *B) {
2582  setSuccessor(idx, B);
2583}
2584
2585
2586// Define these methods here so vtables don't get emitted into every translation
2587// unit that uses these classes.
2588
2589GetElementPtrInst *GetElementPtrInst::clone() const {
2590  return new GetElementPtrInst(*this);
2591}
2592
2593BinaryOperator *BinaryOperator::clone() const {
2594  return create(getOpcode(), Ops[0], Ops[1]);
2595}
2596
2597CmpInst* CmpInst::clone() const {
2598  return create(getOpcode(), getPredicate(), Ops[0], Ops[1]);
2599}
2600
2601MallocInst *MallocInst::clone()   const { return new MallocInst(*this); }
2602AllocaInst *AllocaInst::clone()   const { return new AllocaInst(*this); }
2603FreeInst   *FreeInst::clone()     const { return new FreeInst(getOperand(0)); }
2604LoadInst   *LoadInst::clone()     const { return new LoadInst(*this); }
2605StoreInst  *StoreInst::clone()    const { return new StoreInst(*this); }
2606CastInst   *TruncInst::clone()    const { return new TruncInst(*this); }
2607CastInst   *ZExtInst::clone()     const { return new ZExtInst(*this); }
2608CastInst   *SExtInst::clone()     const { return new SExtInst(*this); }
2609CastInst   *FPTruncInst::clone()  const { return new FPTruncInst(*this); }
2610CastInst   *FPExtInst::clone()    const { return new FPExtInst(*this); }
2611CastInst   *UIToFPInst::clone()   const { return new UIToFPInst(*this); }
2612CastInst   *SIToFPInst::clone()   const { return new SIToFPInst(*this); }
2613CastInst   *FPToUIInst::clone()   const { return new FPToUIInst(*this); }
2614CastInst   *FPToSIInst::clone()   const { return new FPToSIInst(*this); }
2615CastInst   *PtrToIntInst::clone() const { return new PtrToIntInst(*this); }
2616CastInst   *IntToPtrInst::clone() const { return new IntToPtrInst(*this); }
2617CastInst   *BitCastInst::clone()  const { return new BitCastInst(*this); }
2618CallInst   *CallInst::clone()     const { return new CallInst(*this); }
2619SelectInst *SelectInst::clone()   const { return new SelectInst(*this); }
2620VAArgInst  *VAArgInst::clone()    const { return new VAArgInst(*this); }
2621
2622ExtractElementInst *ExtractElementInst::clone() const {
2623  return new ExtractElementInst(*this);
2624}
2625InsertElementInst *InsertElementInst::clone() const {
2626  return new InsertElementInst(*this);
2627}
2628ShuffleVectorInst *ShuffleVectorInst::clone() const {
2629  return new ShuffleVectorInst(*this);
2630}
2631PHINode    *PHINode::clone()    const { return new PHINode(*this); }
2632ReturnInst *ReturnInst::clone() const { return new ReturnInst(*this); }
2633BranchInst *BranchInst::clone() const { return new BranchInst(*this); }
2634SwitchInst *SwitchInst::clone() const { return new SwitchInst(*this); }
2635InvokeInst *InvokeInst::clone() const { return new InvokeInst(*this); }
2636UnwindInst *UnwindInst::clone() const { return new UnwindInst(); }
2637UnreachableInst *UnreachableInst::clone() const { return new UnreachableInst();}
2638