Nullstone Logo

COMPANY
Home
Contacts
Customers
Testimonials

PRODUCTS
Overview
NULLSTONE for C
NULLSTONE for Java
Technical Overview

SUPPORT
Release Notes
Download
PGP Information
Service Report
Write Us

INFORMATION
Performance Results
Glossary of Terms

RELATED LINKS
Compiler Connection
Compiler Jobs

Previous Up Next
Hoisting

Loop-invariant expressions can be hoisted out of loops, thus improving run-time performance by executing the expression only once rather than at each iteration.

Example:

In the code fragment below, the expression (x + y) is loop invariant, and the addition can be hoisted out of the loop.

    void f (int x, int y)
    {
      int i;
    
      for (i = 0; i < 100; i++)
        {
          a[i] = x + y;
        }
    }
    

Below is the code fragment after the invariant expression has been hoisted out of the loop.

    void f (int x, int y)
    {
      int i;
      int t;
    
      t = x + y;
      for (i = 0; i < 100; i++)
        {
          a[i] = t;
        }
    }
    

Notes:

Some C compilers can hoist a subset of loop-invariant expressions (e.g. integer addition, subtraction, and multiplication), but few compilers can hoist a wide range of expressions (e.g. left shift, right shift, etc.).

Most compilers reduce expressions with sequence operators (i.e. &&, ||, and ?:) to if-then-else blocks early in the compiler, and most compilers fail to hoist loop-invariant expressions containing sequence operators.

© 1990-2012 Nullstone Corporation. All Rights Reserved.