xref: /llvm-project/clang/test/CodeGen/extend-variable-liveness.c (revision de9b0ddedc43302117b15518ca21f3341cf6b5ff)
1*de9b0ddeSStephen Tozer // RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -emit-llvm -fextend-variable-liveness -o - | FileCheck %s --implicit-check-not=llvm.fake.use
24424c44cSWolfgang Pieb // Check that fake use calls are emitted at the correct locations, i.e.
34424c44cSWolfgang Pieb // at the end of lexical blocks and at the end of the function.
44424c44cSWolfgang Pieb 
54424c44cSWolfgang Pieb int glob_i;
64424c44cSWolfgang Pieb char glob_c;
74424c44cSWolfgang Pieb float glob_f;
84424c44cSWolfgang Pieb 
94424c44cSWolfgang Pieb int foo(int i) {
104424c44cSWolfgang Pieb   // CHECK-LABEL: define{{.*}}foo
114424c44cSWolfgang Pieb   if (i < 4) {
124424c44cSWolfgang Pieb     char j = i * 3;
134424c44cSWolfgang Pieb     if (glob_i > 3) {
144424c44cSWolfgang Pieb       float f = glob_f;
154424c44cSWolfgang Pieb       j = f;
164424c44cSWolfgang Pieb       glob_c = j;
174424c44cSWolfgang Pieb       // CHECK: call void (...) @llvm.fake.use(float %
184424c44cSWolfgang Pieb       // CHECK-NEXT: br label %
194424c44cSWolfgang Pieb     }
204424c44cSWolfgang Pieb     glob_i = j;
214424c44cSWolfgang Pieb     // CHECK: call void (...) @llvm.fake.use(i8 %
224424c44cSWolfgang Pieb     // CHECK-NEXT: br label %
234424c44cSWolfgang Pieb   }
244424c44cSWolfgang Pieb   // CHECK: call void (...) @llvm.fake.use(i32 %
254424c44cSWolfgang Pieb   // CHECK-NEXT: ret
264424c44cSWolfgang Pieb   return 4;
274424c44cSWolfgang Pieb }
284424c44cSWolfgang Pieb 
294424c44cSWolfgang Pieb // CHECK: declare void @llvm.fake.use(...)
30