// File: /workspace/github_cpp_makefile_star2_O2/jstaursky[P]hutch/src/Sleigh/slgh_compile.cc
// Function: SleighCompile::checkLocalExports(Constructor*)
bool SleighCompile::checkLocalExports(Constructor *ct)

{
  if (ct->getTempl() == (ConstructTpl *)0)
    return true;		// No template, collisions impossible
  if (ct->getTempl()->buildOnly())
    return true;		// Operand exports aren't manipulated, so no collision is possible
  if (ct->getNumOperands() < 2)
    return true;		// Collision can only happen with multiple operands
  bool noCollisions = true;
  map<uintb,int4> collect;
  for(int4 i=0;i<ct->getNumOperands();++i) {
    vector<uintb> newCollect;
    ct->getOperand(i)->collectLocalValues(newCollect);
    if (newCollect.empty()) continue;
    int4 collideOperand = findCollision(collect, newCollect, i);
    if (collideOperand >= 0) {
      noCollisions = false;
      if (warnalllocalcollisions) {
	cerr << "Possible collision with symbols ";
	cerr << ct->getOperand(collideOperand)->getName();
	cerr << " and " << ct->getOperand(i)->getName();
	cerr << " in constructor starting at line " << dec << ct->getLineno() << endl;
      }
      break;	// Don't continue
    }
  }
  return noCollisions;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rdi, %r14
movq 0x60(%rsi), %rdi
movb $0x1, %bpl
testq %rdi, %rdi
je 0x2a7c1
movq %rsi, %rbx
callq 0x2270e
testb %al, %al
jne 0x2a7c1
movq 0x18(%rbx), %rax
movq 0x20(%rbx), %rcx
movq %rcx, %rdx
subq %rax, %rdx
shrq $0x3, %rdx
cmpl $0x2, %edx
jl 0x2a7c1
movq %r14, 0x20(%rsp)
leaq 0x30(%rsp), %rdx
andl $0x0, (%rdx)
andq $0x0, 0x8(%rdx)
movq %rdx, 0x10(%rdx)
movq %rdx, 0x18(%rdx)
andq $0x0, 0x20(%rdx)
xorl %r14d, %r14d
movq %rsp, %r12
leaq 0x28(%rsp), %r13
subq %rax, %rcx
shrq $0x3, %rcx
movslq %ecx, %rcx
cmpq %rcx, %r14
setge %bpl
jge 0x2a7b7
andq $0x0, 0x10(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq (%rax,%r14,8), %rdi
movq (%rdi), %rax
movq %r12, %rsi
callq *0x58(%rax)
movq (%rsp), %rax
cmpq 0x8(%rsp), %rax
je 0x2a6f5
movq %r13, %rdi
movq %r12, %rsi
movl %r14d, %edx
callq 0x2a5c0
movl %eax, %r15d
testl %eax, %eax
jns 0x2a70a
movq %r12, %rdi
callq 0x19b72
incq %r14
movq 0x18(%rbx), %rax
movq 0x20(%rbx), %rcx
jmp 0x2a6a4
movq 0x20(%rsp), %rax
cmpb $0x1, 0x337(%rax)
jne 0x2a7af
movq 0x5d8cd(%rip), %rdi     # 0x87ff0
leaq 0x2cbf3(%rip), %rsi     # 0x5731d
callq 0xf350
movl %r15d, %eax
movq 0x18(%rbx), %rcx
movq (%rcx,%rax,8), %rsi
addq $0x8, %rsi
movq 0x5d8ab(%rip), %rdi     # 0x87ff0
callq 0xf320
movq 0x5d89f(%rip), %rdi     # 0x87ff0
leaq 0x2bdd2(%rip), %rsi     # 0x5652a
callq 0xf350
movq 0x18(%rbx), %rcx
movq (%rcx,%r14,8), %rsi
addq $0x8, %rsi
movq %rax, %rdi
callq 0xf320
movq 0x5d878(%rip), %rdi     # 0x87ff0
leaq 0x2c783(%rip), %rsi     # 0x56f02
callq 0xf350
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
movl 0x90(%rbx), %esi
movq %rax, %rdi
callq 0xf6a0
movq %rax, %rdi
callq 0xf1c0
movq %rsp, %rdi
callq 0x19b72
leaq 0x28(%rsp), %rdi
callq 0x2f24c
movl %ebp, %eax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2a7d6
jmp 0x2a7d6
movq %rax, %rbx
movq %rsp, %rdi
callq 0x19b72
leaq 0x28(%rsp), %rdi
callq 0x2f24c
movq %rbx, %rdi
callq 0xf6e0
nop