def test_propagate_copies_false(self):
        arguments = [self.foo,
                   S('command', 'move', '$1', '$2'),
                   S('command', 'move', '$10', '$20'),
                   S('command', 'addu', '$1', '$5', 1),
                   S('command', 'addu', '$3', '$1', '$4'),
                   self.bar]
        block = B(arguments)

        find_basic_blocks([block])
        generate_flow_graph([block])
        reaching_definitions.create_in_out([block])
        copy_propagation.create_in_out([block])

        self.assertFalse(propagate_copies(block))
        self.assertEqual(block.statements, arguments)
    def test_propagate_copies_other_arg(self):
        block = B([self.foo,
                   S('command', 'move', '$1', '$2'),
                   self.foo,
                   S('command', 'addu', '$3', '$4', '$1'),
                   self.bar])

        find_basic_blocks([block])
        generate_flow_graph([block])
        reaching_definitions.create_in_out([block])
        copy_propagation.create_in_out([block])

        self.assertTrue(propagate_copies(block))
        self.assertEqual(block.statements, [self.foo,
                   S('command', 'move', '$1', '$2'),
                   self.foo,
                   S('command', 'addu', '$3', '$4', '$2'),
                   self.bar])