19203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl// RUN: %clang_cc1 -std=c++11 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s
29203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl
393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z2fni
49203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redlvoid fn(int n) {
59203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK: icmp ult i{{32|64}} %{{[^ ]+}}, 3
69203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK: store i32 1
79203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK: store i32 2
89203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK: store i32 3
9c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: sub {{.*}}, 12
10c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: call void @llvm.memset
119203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  new int[n] { 1, 2, 3 };
129203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl}
139203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl
1493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z15const_underflowv
159203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redlvoid const_underflow() {
169203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
179203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK: call noalias i8* @_Zna{{.}}(i{{32|64}} -1)
189203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  new int[2] { 1, 2, 3 };
199203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl}
209203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl
2193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z11const_exactv
229203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redlvoid const_exact() {
239203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
249203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK-NOT: icmp eq i32*
259203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  new int[3] { 1, 2, 3 };
269203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl}
279203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl
2893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z16const_sufficientv
299203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redlvoid const_sufficient() {
309203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
319203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  new int[4] { 1, 2, 3 };
329203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl  // CHECK: ret void
339203647221439c6eb04842bb8a22f5f03fd4d2bfSebastian Redl}
34c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines
35c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-LABEL: define void @_Z22check_array_value_initv
36c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid check_array_value_init() {
37c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  struct S;
38c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  new (int S::*[3][4][5]) ();
39c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines
40c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: call noalias i8* @_Zna{{.}}(i{{32 240|64 480}})
413ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: getelementptr inbounds i{{32|64}}, i{{32|64}}* {{.*}}, i{{32|64}} 60
42c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines
43c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: phi
44c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: store i{{32|64}} -1,
453ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: getelementptr inbounds i{{32|64}}, i{{32|64}}* {{.*}}, i{{32|64}} 1
46c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: icmp eq
47c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: br i1
48c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines}
49