Intel® C++ Compiler

Intel C++ Compiler 16.0 is now available in Intel Parallel Studio XE 2016

The new version Intel C++ Compiler 16.0 is now available in Intel Parallel Studio XE 2016 that has launched early this week. If your support license is current you can download and install this at no additional charge from the Intel Registration Center

You will find some blog postings about some new features and new free tools.

Оптимизировали, оптимизировали, да не выоптимизировали!

Оптимизация? Конечно, каждый сталкивался с данной задачей при разработке своих, сколь-нибудь значительных, требующих определённых вычислений, приложений. При этом способов оптимизировать код существует огромное множество, и, как следствие, различных путей сделать это в автоматическом режиме с помощью опций компилятора. Вот здесь и возникает проблема – как выбрать то, что нужно нам и не запутаться?

icc 17.0.1 miscompiles valid C code at -O2 and -O3 on x86_64-linux-gnu

Compiler version and platform: 

Intel(R) C Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 17.0.1.132 Build 20161005 

$ icc -Os small.c; ./a.out; echo $?
1
$ 
$ icc -O2 small.c; ./a.out; echo $?
0
$ icc -O3 small.c; ./a.out; echo $?
0
$ 
$ cat small.c
struct S { char f; };

int a, b, *c = &b;

struct S foo ()
{
  struct S d = { 1 };
  for (; a < 1; a++)
    if (d.f)
      *c = 1;
  return d;
}

int main ()
{
  foo ();
  return b; 
}
$ 

 

icc 17.0.1 miscompiles valid C code at -O1 and above on x86_64-linux-gnu

Compiler version and platform: 

Intel(R) C Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 17.0.1.132 Build 20161005 

$ icc -O0 small.c; ./a.out; echo $?
1
$ 
$ icc -O1 small.c; ./a.out; echo $?
0
$ 
$ cat small.c
struct
{
  int f:2;
} volatile a = { -1 };

int b = 1;

int main ()
{
  short c = 0;
  if (!(!b || a.f > 0))
    c = 1;
  return c;
}
$ 

 

icc 17.0.1 miscompiles valid C code at -Os and above on x86_64-linux-gnu

Compiler version and platform: 

Intel(R) C Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 17.0.1.132 Build 20161005 

$ icc -O1 small.c; ./a.out; echo $?
0
$ 
$ icc -Os small.c; ./a.out; echo $?
1
$ 
$ cat small.c
char a[1];

int main ()
{
  unsigned long b = ~0;
  if (!a[0])
    b = 0;
  if (a[0])
    while (1)
      if (a[b])
        break;
  return !a[0] && b;
}
$ 

 

icc 17.0.1 miscompiles valid C code at -O1 and above on x86_64-linux-gnu

Compiler version and platform: 

Intel(R) C Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 17.0.1.132 Build 20161005 

$ icc -O0 small.c; ./a.out
1
$ 
$ icc -O1 small.c; ./a.out
0
$ 
$ cat small.c
int printf (const char *, ...);

static long a;

int foo (int b)
{
  if (0) 
    if (1)
      return a;
  return b;
}

int main ()
{
  printf ("%d\n", foo (1));
  return 0; 
}
$ 

 

icc 17.0.1 miscompiles valid C code at -O3 on x86_64-linux-gnu

Compiler version and platform: 

Intel(R) C Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 17.0.1.132 Build 20161005 

$ icc -O2 small.c; ./a.out; echo $?
1
$ 
$ icc -O3 small.c; ./a.out; echo $?
0
$ 
$ cat small.c
short a = 1, b, c; 

void fn1 ()
{
  for (b = 5; b != -1; b -= 7)
    {
      while (c)
        c++;
      if (!b)
        return; 
    }
  a = 0;
}

int main ()
{
  fn1 ();
  return a; 
}
$ 

 

icc 17.0.1 miscompiles valid C code (compiled code SIGFPE) at -O1 and above on x86_64-linux-gnu

Compiler version and platform: 

Intel(R) C Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 17.0.1.132 Build 20161005 

$ icc -O0 small.c; ./a.out
$ 
$ icc -O1 small.c
$ ./a.out
Floating point exception (core dumped)
$ 
$ cat small.c
volatile struct S
{
  int f:4;
} b;

int a, c = 1, d; 

int main ()
{
  for (; a < 2; a++)
    {
      for (; d < 1; d++)
        b.f = 1;
      b.f = 0 % b.f - 1;
      if (!(c && b.f < 0))
        b.f = 0;
    }
  return 0; 
}
$ 

 

Subscribe to Intel® C++ Compiler