|
| 1 | +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --include-generated-funcs |
| 2 | +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++14 -emit-llvm -o - %s | FileCheck %s |
| 3 | + |
| 4 | +constexpr int b = 10; |
| 5 | +int test_char_cast() { |
| 6 | + const int f = (__builtin_assume_dereferenceable((char*)&b + 1, 3), 12); |
| 7 | + return f; |
| 8 | +} |
| 9 | + |
| 10 | +constexpr long long ll = 100; |
| 11 | +int test_void_cast() { |
| 12 | + const int h = (__builtin_assume_dereferenceable((void*)&ll, 8), 99); |
| 13 | + return h; |
| 14 | +} |
| 15 | + |
| 16 | +constexpr int gb = 10; |
| 17 | +const int gf = (__builtin_assume_dereferenceable((char*)&gb + 1, 3), 12); |
| 18 | +int ga = gf; |
| 19 | + |
| 20 | +// CHECK-LABEL: test_char_castv |
| 21 | +// CHECK: [[F:%.*]] = alloca i32, align 4 |
| 22 | +// CHECK-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr getelementptr inbounds (i8, ptr @_ZL1b, i64 1), i64 3) ] |
| 23 | +// CHECK-NEXT: store i32 12, ptr [[F]], align 4 |
| 24 | +// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[F]], align 4 |
| 25 | +// CHECK-NEXT: ret i32 [[TMP0]] |
| 26 | +// |
| 27 | +// |
| 28 | +// CHECK-LABEL: test_void_castv |
| 29 | +// CHECK: [[H:%.*]] = alloca i32, align 4 |
| 30 | +// CHECK-NEXT: store i32 99, ptr [[H]], align 4 |
| 31 | +// CHECK-NEXT: ret i32 99 |
| 32 | +// |
| 33 | +// |
| 34 | +// CHECK-LABEL: __cxx_global_var_init |
| 35 | +// CHECK: [[TMP0:%.*]] = load i32, ptr @_ZL2gf, align 4 |
| 36 | +// CHECK-NEXT: store i32 [[TMP0]], ptr @ga, align 4 |
| 37 | +// CHECK-NEXT: ret void |
| 38 | +// |
| 39 | +// |
| 40 | +// CHECK-LABEL: __cxx_global_var_init.1 |
| 41 | +// CHECK: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr getelementptr inbounds (i8, ptr @_ZL2gb, i64 1), i64 3) ] |
| 42 | +// CHECK-NEXT: store i32 12, ptr @_ZL2gf, align 4 |
| 43 | +// CHECK-NEXT: ret void |
| 44 | +// |
| 45 | +// |
| 46 | +// CHECK-LABEL: _GLOBAL__sub_I_builtin_assume_dereferenceable_constexpr.cpp |
| 47 | +// CHECK: call void @__cxx_global_var_init.1() |
| 48 | +// CHECK-NEXT: call void @__cxx_global_var_init() |
| 49 | +// CHECK-NEXT: ret void |
| 50 | +// |
0 commit comments