forked from OSchip/llvm-project
The maximal representable alignment in LLVM IR is 1GiB, not 512MiB
In LLVM IR, `AlignmentBitfieldElementT` is 5-bit wide But that means that the maximal alignment exponent is `(1<<5)-2`, which is `30`, not `29`. And indeed, alignment of `1073741824` roundtrips IR serialization-deserialization. While this doesn't seem all that important, this doubles the maximal supported alignment from 512MiB to 1GiB, and there's actually one noticeable use-case for that; On X86, the huge pages can have sizes of 2MiB and 1GiB (!). So while this doesn't add support for truly huge alignments, which i think we can easily-ish do if wanted, i think this adds zero-cost support for a not-trivially-dismissable case. I don't believe we need any upgrade infrastructure, and since we don't explicitly record the IR version, we don't need to bump one either. As @craig.topper speculates in D108661#2963519, this might be an artificial limit imposed by the original implementation of the `getAlignment()` functions. Differential Revision: https://reviews.llvm.org/D108661
This commit is contained in:
parent
5ece556271
commit
564d85e090
|
@ -396,7 +396,7 @@ public:
|
|||
///
|
||||
/// This is the greatest alignment value supported by load, store, and alloca
|
||||
/// instructions, and global values.
|
||||
static const unsigned MaxAlignmentExponent = 29;
|
||||
static const unsigned MaxAlignmentExponent = 30;
|
||||
static const unsigned MaximumAlignment = 1u << MaxAlignmentExponent;
|
||||
|
||||
typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
|
||||
|
|
|
@ -551,9 +551,11 @@ namespace dr648 { // dr648: yes
|
|||
|
||||
#if __cplusplus >= 201103L
|
||||
namespace dr649 { // dr649: yes
|
||||
alignas(0x40000000) int n; // expected-error {{requested alignment}}1
|
||||
struct alignas(0x40000000) X {}; // expected-error {{requested alignment}}
|
||||
struct Y { int n alignas(0x40000000); }; // expected-error {{requested alignment}}
|
||||
alignas(0x80000000) int n; // expected-error {{requested alignment}}1
|
||||
struct alignas(0x80000000) X {}; // expected-error {{requested alignment}}
|
||||
struct Y {
|
||||
int n alignas(0x80000000); // expected-error {{requested alignment}}
|
||||
};
|
||||
struct alignas(256) Z {};
|
||||
// This part is superseded by dr2130 and eventually by aligned allocation support.
|
||||
auto *p = new Z;
|
||||
|
|
|
@ -117,7 +117,7 @@ int test6() {
|
|||
// CHECK-NEXT: store i32* [[A]], i32** [[A_ADDR]], align 8
|
||||
// CHECK-NEXT: [[TMP0:%.*]] = load i32*, i32** [[A_ADDR]], align 8
|
||||
// CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[TMP0]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* [[TMP1]], i64 536870912) ]
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* [[TMP1]], i64 1073741824) ]
|
||||
// CHECK-NEXT: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
|
||||
// CHECK-NEXT: store i32* [[TMP2]], i32** [[A_ADDR]], align 8
|
||||
// CHECK-NEXT: [[TMP3:%.*]] = load i32*, i32** [[A_ADDR]], align 8
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 10 }, {{.*}}* @[[CHAR]] }
|
||||
|
||||
char **passthrough(__attribute__((align_value(0x80000000))) char **x) {
|
||||
// CHECK-NOSANITIZE: define{{.*}} i8** @{{.*}}(i8** align 536870912 %[[X:.*]])
|
||||
// CHECK-NOSANITIZE: define{{.*}} i8** @{{.*}}(i8** align 1073741824 %[[X:.*]])
|
||||
// CHECK-SANITIZE: define{{.*}} i8** @{{.*}}(i8** %[[X:.*]])
|
||||
// CHECK-NEXT: [[entry:.*]]:
|
||||
// CHECK-NEXT: %[[X_ADDR:.*]] = alloca i8**, align 8
|
||||
|
|
|
@ -18,17 +18,17 @@ void *caller(char **x, unsigned long offset) {
|
|||
// CHECK-NEXT: %[[OFFSET_RELOADED:.*]] = load i64, i64* %[[OFFSET_ADDR]], align 8
|
||||
// CHECK-SANITIZE-NEXT: %[[PTRINT:.*]] = ptrtoint i8* %[[BITCAST]] to i64
|
||||
// CHECK-SANITIZE-NEXT: %[[OFFSETPTR:.*]] = sub i64 %[[PTRINT]], %[[OFFSET_RELOADED]]
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKEDPTR:.*]] = and i64 %[[OFFSETPTR]], 536870911
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKEDPTR:.*]] = and i64 %[[OFFSETPTR]], 1073741823
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
|
||||
// CHECK-SANITIZE-NEXT: %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[BITCAST]] to i64, !nosanitize
|
||||
// CHECK-SANITIZE-NEXT: br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
|
||||
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
|
||||
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 %[[OFFSET_RELOADED]]){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 %[[OFFSET_RELOADED]]){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 %[[OFFSET_RELOADED]]){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 %[[OFFSET_RELOADED]]){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
|
||||
// CHECK-SANITIZE: [[CONT]]:
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 536870912, i64 %[[OFFSET_RELOADED]]) ]
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 1073741824, i64 %[[OFFSET_RELOADED]]) ]
|
||||
// CHECK-NEXT: ret i8* %[[BITCAST]]
|
||||
// CHECK-NEXT: }
|
||||
#line 100
|
||||
|
|
|
@ -15,17 +15,17 @@ void *caller(char **x) {
|
|||
// CHECK-NEXT: %[[BITCAST:.*]] = bitcast i8** %[[X_RELOADED]] to i8*
|
||||
// CHECK-SANITIZE-NEXT: %[[PTRINT:.*]] = ptrtoint i8* %[[BITCAST]] to i64
|
||||
// CHECK-SANITIZE-NEXT: %[[OFFSETPTR:.*]] = sub i64 %[[PTRINT]], 42
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKEDPTR:.*]] = and i64 %[[OFFSETPTR]], 536870911
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKEDPTR:.*]] = and i64 %[[OFFSETPTR]], 1073741823
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
|
||||
// CHECK-SANITIZE-NEXT: %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[BITCAST]] to i64, !nosanitize
|
||||
// CHECK-SANITIZE-NEXT: br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
|
||||
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
|
||||
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 42){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 42){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 42){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 42){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
|
||||
// CHECK-SANITIZE: [[CONT]]:
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 536870912, i64 42) ]
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 1073741824, i64 42) ]
|
||||
// CHECK-NEXT: ret i8* %[[BITCAST]]
|
||||
// CHECK-NEXT: }
|
||||
#line 100
|
||||
|
|
|
@ -14,17 +14,17 @@ void *caller(char **x) {
|
|||
// CHECK-NEXT: %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
|
||||
// CHECK-NEXT: %[[BITCAST:.*]] = bitcast i8** %[[X_RELOADED]] to i8*
|
||||
// CHECK-SANITIZE-NEXT: %[[PTRINT:.*]] = ptrtoint i8* %[[BITCAST]] to i64
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 536870911
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 1073741823
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
|
||||
// CHECK-SANITIZE-NEXT: %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[BITCAST]] to i64, !nosanitize
|
||||
// CHECK-SANITIZE-NEXT: br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
|
||||
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
|
||||
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 0){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 0){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
|
||||
// CHECK-SANITIZE: [[CONT]]:
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 536870912) ]
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 1073741824) ]
|
||||
// CHECK-NEXT: ret i8* %[[BITCAST]]
|
||||
// CHECK-NEXT: }
|
||||
#line 100
|
||||
|
|
|
@ -13,20 +13,20 @@ void func(char *data) {
|
|||
// CHECK: store i8* %[[DATA]], i8** %[[DATA_ADDR]], align 8
|
||||
// CHECK: %[[DATA_RELOADED:.*]] = load i8*, i8** %[[DATA_ADDR]], align 8
|
||||
// CHECK-SANITIZE-NEXT: %[[PTRINT:.*]] = ptrtoint i8* %[[DATA_RELOADED]] to i64
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 1073741823
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 2147483647
|
||||
// CHECK-SANITIZE-NEXT: %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
|
||||
// CHECK-SANITIZE-NEXT: %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[DATA_RELOADED]] to i64, !nosanitize
|
||||
// CHECK-SANITIZE-NEXT: br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
|
||||
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
|
||||
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
|
||||
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
|
||||
// CHECK-SANITIZE: [[CONT]]:
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[DATA_RELOADED]], i64 1073741824) ]
|
||||
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[DATA_RELOADED]], i64 2147483648) ]
|
||||
|
||||
#line 100
|
||||
#pragma omp for simd aligned(data : 0x40000000)
|
||||
#pragma omp for simd aligned(data : 0x80000000)
|
||||
for (int x = 0; x < 1; x++)
|
||||
data[x] = data[x];
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// return values
|
||||
void test_void_alloc_align(void) __attribute__((alloc_align(1))); // expected-warning {{'alloc_align' attribute only applies to return values that are pointers}}
|
||||
void *test_ptr_alloc_align(int a) __attribute__((alloc_align(1))); // no-warning
|
||||
void *test_ptr_alloc_align(unsigned int a) __attribute__((alloc_align(1))); // no-warning
|
||||
|
||||
int j __attribute__((alloc_align(1))); // expected-warning {{'alloc_align' attribute only applies to non-K&R-style functions}}
|
||||
void *test_no_params_zero(void) __attribute__((alloc_align(0))); // expected-error {{'alloc_align' attribute parameter 1 is out of bounds}}
|
||||
|
@ -26,6 +26,6 @@ void *align16() {
|
|||
void *align15() {
|
||||
return test_ptr_alloc_align(15); // expected-warning {{requested alignment is not a power of 2}}
|
||||
}
|
||||
void *align536870912() {
|
||||
return test_ptr_alloc_align(1073741824); // expected-warning {{requested alignment must be 536870912 bytes or smaller; maximum alignment assumed}}
|
||||
void *align1073741824() {
|
||||
return test_ptr_alloc_align(2147483648); // expected-warning {{requested alignment must be 1073741824 bytes or smaller; maximum alignment assumed}}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -verify %s
|
||||
|
||||
int x __attribute__((aligned(3))); // expected-error {{requested alignment is not a power of 2}}
|
||||
int y __attribute__((aligned(1 << 30))); // expected-error {{requested alignment must be 536870912 bytes or smaller}}
|
||||
int y __attribute__((aligned(1 << 31))); // expected-error {{requested alignment must be 1073741824 bytes or smaller}}
|
||||
|
||||
// PR26444
|
||||
int y __attribute__((aligned(1 << 29)));
|
||||
|
|
|
@ -46,7 +46,7 @@ int test8(int *a, int j) {
|
|||
void test_void_assume_aligned(void) __attribute__((assume_aligned(32))); // expected-warning {{'assume_aligned' attribute only applies to return values that are pointers}}
|
||||
int test_int_assume_aligned(void) __attribute__((assume_aligned(16))); // expected-warning {{'assume_aligned' attribute only applies to return values that are pointers}}
|
||||
void *test_ptr_assume_aligned(void) __attribute__((assume_aligned(64))); // no-warning
|
||||
void *test_ptr_assume_aligned(void) __attribute__((assume_aligned(1073741824))); // expected-warning {{requested alignment must be 536870912 bytes or smaller; maximum alignment assumed}}
|
||||
void *test_ptr_assume_aligned(void) __attribute__((assume_aligned(2147483648))); // expected-warning {{requested alignment must be 1073741824 bytes or smaller; maximum alignment assumed}}
|
||||
|
||||
int j __attribute__((assume_aligned(8))); // expected-warning {{'assume_aligned' attribute only applies to Objective-C methods and functions}}
|
||||
void *test_no_fn_proto() __attribute__((assume_aligned(32))); // no-warning
|
||||
|
@ -60,6 +60,6 @@ void *test_no_fn_proto() __attribute__((assume_aligned())); // expected-error {{
|
|||
void *test_no_fn_proto() __attribute__((assume_aligned(32, 45, 37))); // expected-error {{'assume_aligned' attribute takes no more than 2 arguments}}
|
||||
|
||||
int pr43638(int *a) {
|
||||
a = __builtin_assume_aligned(a, 1073741824); // expected-warning {{requested alignment must be 536870912 bytes or smaller; maximum alignment assumed}}
|
||||
return a[0];
|
||||
a = __builtin_assume_aligned(a, 2147483648); // expected-warning {{requested alignment must be 1073741824 bytes or smaller; maximum alignment assumed}}
|
||||
return a[0];
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@ struct param_num {
|
|||
|
||||
template <typename T>
|
||||
struct dependent_ret {
|
||||
T* Foo(int a) __attribute__((alloc_align(2)));// no-warning, ends up being int**.
|
||||
T Foo2(int a) __attribute__((alloc_align(2)));// expected-warning {{'alloc_align' attribute only applies to return values that are pointers or references}}
|
||||
T *Foo(unsigned a) __attribute__((alloc_align(2))); // no-warning, ends up being int**.
|
||||
T Foo2(unsigned a) __attribute__((alloc_align(2))); // expected-warning {{'alloc_align' attribute only applies to return values that are pointers or references}}
|
||||
};
|
||||
|
||||
// Following 2 errors associated only with the 'float' versions below.
|
||||
|
@ -32,8 +32,8 @@ void dependent_impl(int align) {
|
|||
b.Foo2(1);
|
||||
b.Foo(3); // expected-warning {{requested alignment is not a power of 2}}
|
||||
b.Foo2(3); // expected-warning {{requested alignment is not a power of 2}}
|
||||
b.Foo(1073741824); // expected-warning {{requested alignment must be 536870912 bytes or smaller; maximum alignment assumed}}
|
||||
b.Foo2(1073741824); // expected-warning {{requested alignment must be 536870912 bytes or smaller; maximum alignment assumed}}
|
||||
b.Foo(2147483648); // expected-warning {{requested alignment must be 1073741824 bytes or smaller; maximum alignment assumed}}
|
||||
b.Foo2(2147483648); // expected-warning {{requested alignment must be 1073741824 bytes or smaller; maximum alignment assumed}}
|
||||
b.Foo(align);
|
||||
b.Foo2(align);
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ protected:
|
|||
// Template alias so that all Instruction storing alignment use the same
|
||||
// definiton.
|
||||
// Valid alignments are powers of two from 2^0 to 2^MaxAlignmentExponent =
|
||||
// 2^29. We store them as Log2(Alignment), so we need 5 bits to encode the 30
|
||||
// 2^30. We store them as Log2(Alignment), so we need 5 bits to encode the 31
|
||||
// possible values.
|
||||
template <unsigned Offset>
|
||||
using AlignmentBitfieldElementT =
|
||||
|
|
|
@ -781,7 +781,7 @@ public:
|
|||
///
|
||||
/// This is the greatest alignment value supported by load, store, and alloca
|
||||
/// instructions, and global values.
|
||||
static constexpr unsigned MaxAlignmentExponent = 29;
|
||||
static constexpr unsigned MaxAlignmentExponent = 30;
|
||||
static constexpr unsigned MaximumAlignment = 1u << MaxAlignmentExponent;
|
||||
|
||||
/// Mutate the type of this Value to be of the specified type.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; RUN: not llvm-as %s -o /dev/null 2>/dev/null
|
||||
|
||||
define void @foo() {
|
||||
%p = alloca i1, align 1073741824
|
||||
%p = alloca i1, align 2147483648
|
||||
ret void
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; RUN: not llvm-as %s -o /dev/null 2>/dev/null
|
||||
|
||||
define void @foo() {
|
||||
load i1, i1* %p, align 1073741824
|
||||
define void @foo(i1* %p) {
|
||||
load i1, i1* %p, align 2147483648
|
||||
ret void
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; RUN: not llvm-as %s -o /dev/null 2>/dev/null
|
||||
|
||||
define void @foo() {
|
||||
store i1 false, i1* %p, align 1073741824
|
||||
define void @foo(i1* %p) {
|
||||
store i1 false, i1* %p, align 2147483648
|
||||
ret void
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
; RUN: llvm-as %s -o /dev/null
|
||||
; RUN: verify-uselistorder %s
|
||||
|
||||
@A = global i1 0, align 536870912
|
||||
@A = global i1 0, align 1073741824
|
||||
|
||||
define void @foo() {
|
||||
%p = alloca i1, align 536870912
|
||||
load i1, i1* %p, align 536870912
|
||||
store i1 false, i1* %p, align 536870912
|
||||
%p = alloca i1, align 1073741824
|
||||
load i1, i1* %p, align 1073741824
|
||||
store i1 false, i1* %p, align 1073741824
|
||||
ret void
|
||||
}
|
||||
|
|
|
@ -10,10 +10,10 @@ define void @foo(i32* inalloca(i32) %args) {
|
|||
|
||||
define void @bar() {
|
||||
; Use the maximum alignment, since we stuff our bit with alignment.
|
||||
%args = alloca inalloca i32, align 536870912
|
||||
%args = alloca inalloca i32, align 1073741824
|
||||
call void @foo(i32* inalloca(i32) %args)
|
||||
ret void
|
||||
}
|
||||
; CHECK-LABEL: define void @bar() {
|
||||
; CHECK: %args = alloca inalloca i32, align 536870912
|
||||
; CHECK: %args = alloca inalloca i32, align 1073741824
|
||||
; CHECK: call void @foo(i32* inalloca(i32) %args)
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
# RUN: llc -march=x86-64 -run-pass=none -o - %s | FileCheck %s
|
||||
|
||||
# CHECK: name: truly_aligned_load
|
||||
# CHECK: MOV32rm {{.*}} :: (load (s32), align 1073741824)
|
||||
|
||||
# CHECK: name: basealigned_load
|
||||
# CHECK: MOV32rm {{.*}} :: (load (s32) from unknown-address + 4, basealign 1073741824)
|
||||
|
||||
---
|
||||
name: truly_aligned_load
|
||||
alignment: 16
|
||||
tracksRegLiveness: true
|
||||
liveins:
|
||||
- { reg: '$rdi' }
|
||||
frameInfo:
|
||||
maxAlignment: 1
|
||||
maxCallFrameSize: 0
|
||||
machineFunctionInfo: {}
|
||||
body: |
|
||||
bb.0:
|
||||
liveins: $rdi
|
||||
|
||||
renamable $eax = MOV32rm killed renamable $rdi, 1, $noreg, 0, $noreg :: (load (s32) from unknown-address, align 1073741824)
|
||||
RETQ $eax
|
||||
|
||||
...
|
||||
---
|
||||
name: basealigned_load
|
||||
alignment: 16
|
||||
tracksRegLiveness: true
|
||||
liveins:
|
||||
- { reg: '$rdi' }
|
||||
frameInfo:
|
||||
maxAlignment: 1
|
||||
maxCallFrameSize: 0
|
||||
machineFunctionInfo: {}
|
||||
body: |
|
||||
bb.0:
|
||||
liveins: $rdi
|
||||
|
||||
renamable $eax = MOV32rm killed renamable $rdi, 1, $noreg, 0, $noreg :: (load (s32) from unknown-address + 4, basealign 1073741824)
|
||||
RETQ $eax
|
||||
|
||||
...
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
define internal void @dead() {
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@dead() {
|
||||
; IS__CGSCC____-NEXT: [[TMP1:%.*]] = call i32 @test(i32* noalias noundef align 536870912 null)
|
||||
; IS__CGSCC____-NEXT: [[TMP1:%.*]] = call i32 @test(i32* noalias noundef align 1073741824 null)
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
call i32 @test(i32* null, i32* null)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
define internal void @dead() {
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@dead() {
|
||||
; IS__CGSCC____-NEXT: [[TMP1:%.*]] = call i32 @test(i32* noalias noundef align 536870912 null)
|
||||
; IS__CGSCC____-NEXT: [[TMP1:%.*]] = call i32 @test(i32* noalias noundef align 1073741824 null)
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
call i32 @test(i32* null, i32* null)
|
||||
|
|
|
@ -153,7 +153,7 @@ define void @fn_no_null_opt(i32* %P, i1 %C) null_pointer_is_valid {
|
|||
; IS__CGSCC_OPM-NEXT: br i1 [[C]], label [[IF_END]], label [[EXIT:%.*]]
|
||||
; IS__CGSCC_OPM: if.end:
|
||||
; IS__CGSCC_OPM-NEXT: [[E_2:%.*]] = phi i32* [ undef, [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
|
||||
; IS__CGSCC_OPM-NEXT: [[TMP0:%.*]] = load i32, i32* null, align 536870912
|
||||
; IS__CGSCC_OPM-NEXT: [[TMP0:%.*]] = load i32, i32* null, align 1073741824
|
||||
; IS__CGSCC_OPM-NEXT: [[CALL:%.*]] = call i32 @fn0(i32 [[TMP0]])
|
||||
; IS__CGSCC_OPM-NEXT: store i32 [[CALL]], i32* [[P]], align 4
|
||||
; IS__CGSCC_OPM-NEXT: br label [[FOR_COND1]]
|
||||
|
@ -169,7 +169,7 @@ define void @fn_no_null_opt(i32* %P, i1 %C) null_pointer_is_valid {
|
|||
; IS__CGSCC_NPM-NEXT: br i1 [[C]], label [[IF_END]], label [[EXIT:%.*]]
|
||||
; IS__CGSCC_NPM: if.end:
|
||||
; IS__CGSCC_NPM-NEXT: [[E_2:%.*]] = phi i32* [ undef, [[ENTRY:%.*]] ], [ null, [[FOR_COND1:%.*]] ]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP0:%.*]] = load i32, i32* null, align 536870912
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP0:%.*]] = load i32, i32* null, align 1073741824
|
||||
; IS__CGSCC_NPM-NEXT: store i32 [[TMP0]], i32* [[P]], align 4
|
||||
; IS__CGSCC_NPM-NEXT: br label [[FOR_COND1]]
|
||||
; IS__CGSCC_NPM: exit:
|
||||
|
|
|
@ -39,10 +39,10 @@ define dso_local i32 @main() {
|
|||
; IS__TUNIT____-NEXT: [[ALLOC1:%.*]] = alloca i8, align 8
|
||||
; IS__TUNIT____-NEXT: [[ALLOC2:%.*]] = alloca i8, align 8
|
||||
; IS__TUNIT____-NEXT: [[THREAD:%.*]] = alloca i64, align 8
|
||||
; IS__TUNIT____-NEXT: [[CALL:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 536870912 null, i8* (i8*)* noundef nonnull @foo, i8* noalias nocapture nofree readnone align 536870912 undef)
|
||||
; IS__TUNIT____-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 536870912 null, i8* (i8*)* noundef nonnull @bar, i8* noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) undef)
|
||||
; IS__TUNIT____-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 536870912 null, i8* (i8*)* noundef nonnull @baz, i8* noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1]])
|
||||
; IS__TUNIT____-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 536870912 null, i8* (i8*)* noundef nonnull @buz, i8* noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC2]])
|
||||
; IS__TUNIT____-NEXT: [[CALL:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 1073741824 null, i8* (i8*)* noundef nonnull @foo, i8* noalias nocapture nofree readnone align 1073741824 undef)
|
||||
; IS__TUNIT____-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 1073741824 null, i8* (i8*)* noundef nonnull @bar, i8* noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) undef)
|
||||
; IS__TUNIT____-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 1073741824 null, i8* (i8*)* noundef nonnull @baz, i8* noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1]])
|
||||
; IS__TUNIT____-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 1073741824 null, i8* (i8*)* noundef nonnull @buz, i8* noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC2]])
|
||||
; IS__TUNIT____-NEXT: ret i32 0
|
||||
;
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@main() {
|
||||
|
@ -50,10 +50,10 @@ define dso_local i32 @main() {
|
|||
; IS__CGSCC____-NEXT: [[ALLOC1:%.*]] = alloca i8, align 8
|
||||
; IS__CGSCC____-NEXT: [[ALLOC2:%.*]] = alloca i8, align 8
|
||||
; IS__CGSCC____-NEXT: [[THREAD:%.*]] = alloca i64, align 8
|
||||
; IS__CGSCC____-NEXT: [[CALL:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 536870912 null, i8* (i8*)* noundef nonnull @foo, i8* noalias nocapture nofree noundef readnone align 536870912 null)
|
||||
; IS__CGSCC____-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 536870912 null, i8* (i8*)* noundef nonnull @bar, i8* noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(8) bitcast (i8** @GlobalVPtr to i8*))
|
||||
; IS__CGSCC____-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 536870912 null, i8* (i8*)* noundef nonnull @baz, i8* noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1]])
|
||||
; IS__CGSCC____-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 536870912 null, i8* (i8*)* noundef nonnull @buz, i8* noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC2]])
|
||||
; IS__CGSCC____-NEXT: [[CALL:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 1073741824 null, i8* (i8*)* noundef nonnull @foo, i8* noalias nocapture nofree noundef readnone align 1073741824 null)
|
||||
; IS__CGSCC____-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 1073741824 null, i8* (i8*)* noundef nonnull @bar, i8* noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(8) bitcast (i8** @GlobalVPtr to i8*))
|
||||
; IS__CGSCC____-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 1073741824 null, i8* (i8*)* noundef nonnull @baz, i8* noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1]])
|
||||
; IS__CGSCC____-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(i64* noundef nonnull align 8 dereferenceable(8) [[THREAD]], %union.pthread_attr_t* noalias nocapture noundef align 1073741824 null, i8* (i8*)* noundef nonnull @buz, i8* noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC2]])
|
||||
; IS__CGSCC____-NEXT: ret i32 0
|
||||
;
|
||||
entry:
|
||||
|
@ -72,13 +72,13 @@ declare !callback !0 dso_local i32 @pthread_create(i64*, %union.pthread_attr_t*,
|
|||
define internal i8* @foo(i8* %arg) {
|
||||
; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@foo
|
||||
; IS__TUNIT____-SAME: (i8* noalias nocapture nofree readnone align 536870912 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__TUNIT____-SAME: (i8* noalias nocapture nofree readnone align 1073741824 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
; IS__TUNIT____-NEXT: ret i8* null
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@foo
|
||||
; IS__CGSCC____-SAME: (i8* noalias nocapture nofree readnone align 536870912 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__CGSCC____-SAME: (i8* noalias nocapture nofree readnone align 1073741824 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
; IS__CGSCC____-NEXT: ret i8* null
|
||||
;
|
||||
|
|
|
@ -25,7 +25,7 @@ define void @t0_caller(i32* %a) {
|
|||
; IS__TUNIT_OPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__TUNIT_OPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__TUNIT_OPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@t0_caller
|
||||
|
@ -37,7 +37,7 @@ define void @t0_caller(i32* %a) {
|
|||
; IS__TUNIT_NPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__TUNIT_NPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@t0_caller
|
||||
|
@ -49,7 +49,7 @@ define void @t0_caller(i32* %a) {
|
|||
; IS__CGSCC_OPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__CGSCC_OPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__CGSCC_OPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@t0_caller
|
||||
|
@ -61,7 +61,7 @@ define void @t0_caller(i32* %a) {
|
|||
; IS__CGSCC_NPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__CGSCC_NPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__CGSCC_NPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t0_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t0_callback_callee to void (i32*, i32*, ...)*), i32* align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
entry:
|
||||
|
@ -125,7 +125,7 @@ define void @t1_caller(i32* noalias %a) {
|
|||
; IS__TUNIT_OPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__TUNIT_OPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__TUNIT_OPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@t1_caller
|
||||
|
@ -137,7 +137,7 @@ define void @t1_caller(i32* noalias %a) {
|
|||
; IS__TUNIT_NPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__TUNIT_NPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@t1_caller
|
||||
|
@ -149,7 +149,7 @@ define void @t1_caller(i32* noalias %a) {
|
|||
; IS__CGSCC_OPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__CGSCC_OPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__CGSCC_OPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@t1_caller
|
||||
|
@ -161,7 +161,7 @@ define void @t1_caller(i32* noalias %a) {
|
|||
; IS__CGSCC_NPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__CGSCC_NPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__CGSCC_NPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t1_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t1_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
entry:
|
||||
|
@ -225,7 +225,7 @@ define void @t2_caller(i32* noalias %a) {
|
|||
; IS__TUNIT_OPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__TUNIT_OPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__TUNIT_OPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@t2_caller
|
||||
|
@ -237,7 +237,7 @@ define void @t2_caller(i32* noalias %a) {
|
|||
; IS__TUNIT_NPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__TUNIT_NPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@t2_caller
|
||||
|
@ -249,7 +249,7 @@ define void @t2_caller(i32* noalias %a) {
|
|||
; IS__CGSCC_OPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__CGSCC_OPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__CGSCC_OPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@t2_caller
|
||||
|
@ -261,7 +261,7 @@ define void @t2_caller(i32* noalias %a) {
|
|||
; IS__CGSCC_NPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__CGSCC_NPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__CGSCC_NPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t2_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t2_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
entry:
|
||||
|
@ -325,8 +325,8 @@ define void @t3_caller(i32* noalias %a) {
|
|||
; IS__TUNIT_OPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__TUNIT_OPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__TUNIT_OPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@t3_caller
|
||||
|
@ -338,8 +338,8 @@ define void @t3_caller(i32* noalias %a) {
|
|||
; IS__TUNIT_NPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__TUNIT_NPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 undef, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@t3_caller
|
||||
|
@ -351,8 +351,8 @@ define void @t3_caller(i32* noalias %a) {
|
|||
; IS__CGSCC_OPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__CGSCC_OPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__CGSCC_OPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@t3_caller
|
||||
|
@ -364,8 +364,8 @@ define void @t3_caller(i32* noalias %a) {
|
|||
; IS__CGSCC_NPM-NEXT: [[TMP0:%.*]] = bitcast i32* [[B]] to i8*
|
||||
; IS__CGSCC_NPM-NEXT: store i32 42, i32* [[B]], align 32
|
||||
; IS__CGSCC_NPM-NEXT: store i32* [[B]], i32** [[C]], align 64
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 536870912 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: call void (i32*, i32*, void (i32*, i32*, ...)*, ...) @t3_callback_broker(i32* noalias nocapture noundef align 1073741824 null, i32* noalias nocapture noundef nonnull align 128 dereferenceable(4) [[PTR]], void (i32*, i32*, ...)* nocapture noundef bitcast (void (i32*, i32*, i32*, i64, i32**)* @t3_callback_callee to void (i32*, i32*, ...)*), i32* nocapture align 256 [[A]], i64 noundef 99, i32** noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(8) [[C]])
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
entry:
|
||||
|
|
|
@ -527,13 +527,13 @@ define void @ub(i32* %0) {
|
|||
; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@ub
|
||||
; IS__TUNIT_NPM-SAME: (i32* nocapture nofree readnone [[TMP0:%.*]]) #[[ATTR8:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: store i32 0, i32* undef, align 536870912
|
||||
; IS__TUNIT_NPM-NEXT: store i32 0, i32* undef, align 1073741824
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@ub
|
||||
; IS__CGSCC____-SAME: (i32* nocapture nofree readnone [[TMP0:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: store i32 0, i32* undef, align 536870912
|
||||
; IS__CGSCC____-NEXT: store i32 0, i32* undef, align 1073741824
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
%poison = sub nuw i32 0, 1 ; Results in a poison value.
|
||||
|
|
|
@ -397,7 +397,7 @@ define void @callerC2() {
|
|||
}
|
||||
define void @callerD1() {
|
||||
; CHECK-LABEL: define {{[^@]+}}@callerD1() {
|
||||
; CHECK-NEXT: [[UNKNOWN:%.*]] = call i8* @argmem_only(i8* noalias nocapture noundef align 536870912 null)
|
||||
; CHECK-NEXT: [[UNKNOWN:%.*]] = call i8* @argmem_only(i8* noalias nocapture noundef align 1073741824 null)
|
||||
; CHECK-NEXT: store i8 0, i8* [[UNKNOWN]], align 1
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
|
@ -407,7 +407,7 @@ define void @callerD1() {
|
|||
}
|
||||
define void @callerD2() {
|
||||
; CHECK-LABEL: define {{[^@]+}}@callerD2() {
|
||||
; CHECK-NEXT: [[UNKNOWN:%.*]] = call i8* @inaccesible_argmem_only_decl(i8* noalias nocapture noundef align 536870912 null)
|
||||
; CHECK-NEXT: [[UNKNOWN:%.*]] = call i8* @inaccesible_argmem_only_decl(i8* noalias nocapture noundef align 1073741824 null)
|
||||
; CHECK-NEXT: store i8 0, i8* [[UNKNOWN]], align 1
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
|
|
|
@ -265,7 +265,7 @@ define i8* @test8(i32* %0) nounwind uwtable {
|
|||
declare void @use_i8(i8* nocapture)
|
||||
define internal void @test9a(i8* %a, i8* %b) {
|
||||
; CHECK-LABEL: define {{[^@]+}}@test9a() {
|
||||
; CHECK-NEXT: call void @use_i8(i8* noalias nocapture noundef align 536870912 null)
|
||||
; CHECK-NEXT: call void @use_i8(i8* noalias nocapture noundef align 1073741824 null)
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
call void @use_i8(i8* null)
|
||||
|
|
|
@ -478,7 +478,7 @@ define i8* @test4_2(i8* %x4_2, i8* %y4_2, i8* %z4_2, i1 %c) {
|
|||
; IS________OPM-SAME: (i8* nocapture nofree readnone [[X4_2:%.*]], i8* nofree readnone returned "no-capture-maybe-returned" [[Y4_2:%.*]], i8* nocapture nofree readnone [[Z4_2:%.*]], i1 [[C:%.*]]) #[[ATTR7]] {
|
||||
; IS________OPM-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
; IS________OPM: t:
|
||||
; IS________OPM-NEXT: call void @test4_1(i8* noalias nocapture nofree noundef readnone align 536870912 null, i1 [[C]]) #[[ATTR7]]
|
||||
; IS________OPM-NEXT: call void @test4_1(i8* noalias nocapture nofree noundef readnone align 1073741824 null, i1 [[C]]) #[[ATTR7]]
|
||||
; IS________OPM-NEXT: store i32* null, i32** @g, align 8
|
||||
; IS________OPM-NEXT: br label [[F]]
|
||||
; IS________OPM: f:
|
||||
|
@ -489,7 +489,7 @@ define i8* @test4_2(i8* %x4_2, i8* %y4_2, i8* %z4_2, i1 %c) {
|
|||
; IS________NPM-SAME: (i8* nocapture nofree readnone [[X4_2:%.*]], i8* nofree readnone returned "no-capture-maybe-returned" [[Y4_2:%.*]], i8* nocapture nofree readnone [[Z4_2:%.*]], i1 [[C:%.*]]) #[[ATTR7]] {
|
||||
; IS________NPM-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
; IS________NPM: t:
|
||||
; IS________NPM-NEXT: call void @test4_1(i8* noalias nocapture nofree noundef readnone align 536870912 null, i1 noundef [[C]]) #[[ATTR7]]
|
||||
; IS________NPM-NEXT: call void @test4_1(i8* noalias nocapture nofree noundef readnone align 1073741824 null, i1 noundef [[C]]) #[[ATTR7]]
|
||||
; IS________NPM-NEXT: store i32* null, i32** @g, align 8
|
||||
; IS________NPM-NEXT: br label [[F]]
|
||||
; IS________NPM: f:
|
||||
|
@ -807,7 +807,7 @@ declare void @unknown(i8*)
|
|||
define void @test_callsite() {
|
||||
; CHECK-LABEL: define {{[^@]+}}@test_callsite() {
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: call void @unknown(i8* noalias nocapture noundef align 536870912 null)
|
||||
; CHECK-NEXT: call void @unknown(i8* noalias nocapture noundef align 1073741824 null)
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
entry:
|
||||
|
|
|
@ -41,7 +41,7 @@ define void @caller1() {
|
|||
|
||||
define internal void @argument_dead_callback_callee(i8* %c) {
|
||||
; CHECK-LABEL: define {{[^@]+}}@argument_dead_callback_callee
|
||||
; CHECK-SAME: (i8* noalias nocapture nofree readnone align 536870912 [[C:%.*]]) {
|
||||
; CHECK-SAME: (i8* noalias nocapture nofree readnone align 1073741824 [[C:%.*]]) {
|
||||
; CHECK-NEXT: call void @unknown()
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
|
@ -51,11 +51,11 @@ define internal void @argument_dead_callback_callee(i8* %c) {
|
|||
|
||||
define void @callback_caller() {
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@callback_caller() {
|
||||
; IS__TUNIT____-NEXT: call void @callback_broker(void (i8*)* noundef @argument_dead_callback_callee, i8* noalias nocapture nofree readnone align 536870912 undef)
|
||||
; IS__TUNIT____-NEXT: call void @callback_broker(void (i8*)* noundef @argument_dead_callback_callee, i8* noalias nocapture nofree readnone align 1073741824 undef)
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@callback_caller() {
|
||||
; IS__CGSCC____-NEXT: call void @callback_broker(void (i8*)* noundef @argument_dead_callback_callee, i8* noalias nocapture nofree noundef readnone align 536870912 null)
|
||||
; IS__CGSCC____-NEXT: call void @callback_broker(void (i8*)* noundef @argument_dead_callback_callee, i8* noalias nocapture nofree noundef readnone align 1073741824 null)
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
call void @callback_broker(void (i8*)* @argument_dead_callback_callee, i8* null)
|
||||
|
|
|
@ -134,13 +134,13 @@ define void @store_wholly_unreachable_volatile() {
|
|||
; IS__TUNIT____: Function Attrs: nofree nounwind readnone willreturn
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@store_wholly_unreachable_volatile
|
||||
; IS__TUNIT____-SAME: () #[[ATTR2:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: store volatile i32 5, i32* null, align 536870912
|
||||
; IS__TUNIT____-NEXT: store volatile i32 5, i32* null, align 1073741824
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nounwind readnone willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@store_wholly_unreachable_volatile
|
||||
; IS__CGSCC____-SAME: () #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: store volatile i32 5, i32* null, align 536870912
|
||||
; IS__CGSCC____-NEXT: store volatile i32 5, i32* null, align 1073741824
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
store volatile i32 5, i32* null
|
||||
|
@ -178,13 +178,13 @@ define void @store_null_pointer_is_defined() null_pointer_is_valid {
|
|||
; IS__TUNIT____: Function Attrs: nofree nosync nounwind null_pointer_is_valid willreturn writeonly
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@store_null_pointer_is_defined
|
||||
; IS__TUNIT____-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: store i32 5, i32* null, align 536870912
|
||||
; IS__TUNIT____-NEXT: store i32 5, i32* null, align 1073741824
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@store_null_pointer_is_defined
|
||||
; IS__CGSCC____-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: store i32 5, i32* null, align 536870912
|
||||
; IS__CGSCC____-NEXT: store i32 5, i32* null, align 1073741824
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
store i32 5, i32* null
|
||||
|
@ -832,7 +832,7 @@ define void @arg_nonnull_violation3_1(i1 %c) {
|
|||
; IS__TUNIT____-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
; IS__TUNIT____: t:
|
||||
; IS__TUNIT____-NEXT: call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR7:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 536870912 null) #[[ATTR7]]
|
||||
; IS__TUNIT____-NEXT: call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 1073741824 null) #[[ATTR7]]
|
||||
; IS__TUNIT____-NEXT: unreachable
|
||||
; IS__TUNIT____: f:
|
||||
; IS__TUNIT____-NEXT: unreachable
|
||||
|
@ -846,7 +846,7 @@ define void @arg_nonnull_violation3_1(i1 %c) {
|
|||
; IS__CGSCC____-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
; IS__CGSCC____: t:
|
||||
; IS__CGSCC____-NEXT: call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR7:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 536870912 null) #[[ATTR7]]
|
||||
; IS__CGSCC____-NEXT: call void @arg_nonnull_12(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 1073741824 null) #[[ATTR7]]
|
||||
; IS__CGSCC____-NEXT: unreachable
|
||||
; IS__CGSCC____: f:
|
||||
; IS__CGSCC____-NEXT: unreachable
|
||||
|
@ -879,7 +879,7 @@ define void @arg_nonnull_violation3_2(i1 %c) {
|
|||
; IS__TUNIT____-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
; IS__TUNIT____: t:
|
||||
; IS__TUNIT____-NEXT: call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR7]]
|
||||
; IS__TUNIT____-NEXT: call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 536870912 null) #[[ATTR7]]
|
||||
; IS__TUNIT____-NEXT: call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 1073741824 null) #[[ATTR7]]
|
||||
; IS__TUNIT____-NEXT: unreachable
|
||||
; IS__TUNIT____: f:
|
||||
; IS__TUNIT____-NEXT: unreachable
|
||||
|
@ -893,7 +893,7 @@ define void @arg_nonnull_violation3_2(i1 %c) {
|
|||
; IS__CGSCC____-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
; IS__CGSCC____: t:
|
||||
; IS__CGSCC____-NEXT: call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]]) #[[ATTR7]]
|
||||
; IS__CGSCC____-NEXT: call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 536870912 null) #[[ATTR7]]
|
||||
; IS__CGSCC____-NEXT: call void @arg_nonnull_12_noundef_2(i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[PTR]], i32* noalias nocapture nofree noundef writeonly align 1073741824 null) #[[ATTR7]]
|
||||
; IS__CGSCC____-NEXT: unreachable
|
||||
; IS__CGSCC____: f:
|
||||
; IS__CGSCC____-NEXT: unreachable
|
||||
|
|
|
@ -449,12 +449,12 @@ define i32* @complicated_args_inalloca(i32* %arg) {
|
|||
define internal i32* @test_preallocated(i32* preallocated(i32) %a) {
|
||||
; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@test_preallocated
|
||||
; IS__TUNIT____-SAME: (i32* noalias nofree noundef nonnull returned writeonly preallocated(i32) align 536870912 dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT____-SAME: (i32* noalias nofree noundef nonnull returned writeonly preallocated(i32) align 1073741824 dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT____-NEXT: ret i32* [[A]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@test_preallocated
|
||||
; IS__CGSCC____-SAME: (i32* noalias nofree noundef nonnull returned writeonly preallocated(i32) align 536870912 dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC____-SAME: (i32* noalias nofree noundef nonnull returned writeonly preallocated(i32) align 1073741824 dereferenceable(4) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC____-NEXT: ret i32* [[A]]
|
||||
;
|
||||
ret i32* %a
|
||||
|
@ -464,14 +464,14 @@ define i32* @complicated_args_preallocated() {
|
|||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_preallocated
|
||||
; IS__TUNIT_OPM-SAME: () #[[ATTR0:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR5:[0-9]+]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call noundef nonnull align 536870912 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 536870912 null) #[[ATTR1]] [ "preallocated"(token [[C]]) ]
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call noundef nonnull align 1073741824 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 1073741824 null) #[[ATTR1]] [ "preallocated"(token [[C]]) ]
|
||||
; IS__TUNIT_OPM-NEXT: ret i32* [[CALL]]
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_preallocated
|
||||
; IS__TUNIT_NPM-SAME: () #[[ATTR0:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR4:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call noundef nonnull align 536870912 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 536870912 null) #[[ATTR1]] [ "preallocated"(token [[C]]) ]
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call noundef nonnull align 1073741824 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 1073741824 null) #[[ATTR1]] [ "preallocated"(token [[C]]) ]
|
||||
; IS__TUNIT_NPM-NEXT: ret i32* [[CALL]]
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
|
@ -495,13 +495,13 @@ define internal void @test_sret(%struct.X* sret(%struct.X) %a, %struct.X** %b) {
|
|||
;
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@test_sret
|
||||
; IS__TUNIT____-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 536870912 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__TUNIT____-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 1073741824 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: store %struct.X* [[A]], %struct.X** [[B]], align 8
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@test_sret
|
||||
; IS__CGSCC____-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 536870912 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC____-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 1073741824 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: store %struct.X* [[A]], %struct.X** [[B]], align 8
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
|
@ -514,13 +514,13 @@ define void @complicated_args_sret(%struct.X** %b) {
|
|||
; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_sret
|
||||
; IS__TUNIT_OPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR2]] {
|
||||
; IS__TUNIT_OPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 536870912 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR4:[0-9]+]]
|
||||
; IS__TUNIT_OPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 1073741824 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR4:[0-9]+]]
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_sret
|
||||
; IS__TUNIT_NPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR2]] {
|
||||
; IS__TUNIT_NPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 536870912 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR3:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 1073741824 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR3:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
|
@ -535,7 +535,7 @@ define void @complicated_args_sret(%struct.X** %b) {
|
|||
define internal %struct.X* @test_nest(%struct.X* nest %a) {
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@test_nest
|
||||
; IS__CGSCC____-SAME: (%struct.X* nest noalias nocapture nofree readnone align 536870912 [[A:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC____-SAME: (%struct.X* nest noalias nocapture nofree readnone align 1073741824 [[A:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC____-NEXT: ret %struct.X* undef
|
||||
;
|
||||
ret %struct.X* %a
|
||||
|
|
|
@ -38,7 +38,7 @@ entry:
|
|||
; ALL: br i1 %tobool, label %entry.cond.end_crit_edge, label %cond.false, !dbg [[LOC_15_6:![0-9]+]]
|
||||
; ALL: entry.cond.end_crit_edge:
|
||||
; GVN: %.pre = load %struct.node*, %struct.node** null, align 8, !dbg [[LOC_16_13:![0-9]+]]
|
||||
; INSTCOMBINE:store %struct.node* poison, %struct.node** null, align 536870912, !dbg [[LOC_16_13:![0-9]+]]
|
||||
; INSTCOMBINE:store %struct.node* poison, %struct.node** null, align 1073741824, !dbg [[LOC_16_13:![0-9]+]]
|
||||
|
||||
cond.false:
|
||||
%0 = bitcast %struct.desc* %desc to i8***, !dbg !11
|
||||
|
|
|
@ -119,7 +119,7 @@ define i32 @test8(i32* %p) {
|
|||
; ordering imposed.
|
||||
define i32 @test9() {
|
||||
; CHECK-LABEL: @test9(
|
||||
; CHECK-NEXT: store i32 poison, i32* null, align 536870912
|
||||
; CHECK-NEXT: store i32 poison, i32* null, align 1073741824
|
||||
; CHECK-NEXT: ret i32 poison
|
||||
;
|
||||
%x = load atomic i32, i32* null unordered, align 4
|
||||
|
@ -128,7 +128,7 @@ define i32 @test9() {
|
|||
|
||||
define i32 @test9_no_null_opt() #0 {
|
||||
; CHECK-LABEL: @test9_no_null_opt(
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null unordered, align 536870912
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null unordered, align 1073741824
|
||||
; CHECK-NEXT: ret i32 [[X]]
|
||||
;
|
||||
%x = load atomic i32, i32* null unordered, align 4
|
||||
|
@ -138,7 +138,7 @@ define i32 @test9_no_null_opt() #0 {
|
|||
; FIXME: Could also fold
|
||||
define i32 @test10() {
|
||||
; CHECK-LABEL: @test10(
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null monotonic, align 536870912
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null monotonic, align 1073741824
|
||||
; CHECK-NEXT: ret i32 [[X]]
|
||||
;
|
||||
%x = load atomic i32, i32* null monotonic, align 4
|
||||
|
@ -147,7 +147,7 @@ define i32 @test10() {
|
|||
|
||||
define i32 @test10_no_null_opt() #0 {
|
||||
; CHECK-LABEL: @test10_no_null_opt(
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null monotonic, align 536870912
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null monotonic, align 1073741824
|
||||
; CHECK-NEXT: ret i32 [[X]]
|
||||
;
|
||||
%x = load atomic i32, i32* null monotonic, align 4
|
||||
|
@ -157,7 +157,7 @@ define i32 @test10_no_null_opt() #0 {
|
|||
; Would this be legal to fold? Probably?
|
||||
define i32 @test11() {
|
||||
; CHECK-LABEL: @test11(
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null seq_cst, align 536870912
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null seq_cst, align 1073741824
|
||||
; CHECK-NEXT: ret i32 [[X]]
|
||||
;
|
||||
%x = load atomic i32, i32* null seq_cst, align 4
|
||||
|
@ -166,7 +166,7 @@ define i32 @test11() {
|
|||
|
||||
define i32 @test11_no_null_opt() #0 {
|
||||
; CHECK-LABEL: @test11_no_null_opt(
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null seq_cst, align 536870912
|
||||
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null seq_cst, align 1073741824
|
||||
; CHECK-NEXT: ret i32 [[X]]
|
||||
;
|
||||
%x = load atomic i32, i32* null seq_cst, align 4
|
||||
|
@ -177,7 +177,7 @@ define i32 @test11_no_null_opt() #0 {
|
|||
; ordering imposed.
|
||||
define i32 @test12() {
|
||||
; CHECK-LABEL: @test12(
|
||||
; CHECK-NEXT: store atomic i32 poison, i32* null unordered, align 536870912
|
||||
; CHECK-NEXT: store atomic i32 poison, i32* null unordered, align 1073741824
|
||||
; CHECK-NEXT: ret i32 0
|
||||
;
|
||||
store atomic i32 0, i32* null unordered, align 4
|
||||
|
@ -186,7 +186,7 @@ define i32 @test12() {
|
|||
|
||||
define i32 @test12_no_null_opt() #0 {
|
||||
; CHECK-LABEL: @test12_no_null_opt(
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null unordered, align 536870912
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null unordered, align 1073741824
|
||||
; CHECK-NEXT: ret i32 0
|
||||
;
|
||||
store atomic i32 0, i32* null unordered, align 4
|
||||
|
@ -196,7 +196,7 @@ define i32 @test12_no_null_opt() #0 {
|
|||
; FIXME: Could also fold
|
||||
define i32 @test13() {
|
||||
; CHECK-LABEL: @test13(
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null monotonic, align 536870912
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null monotonic, align 1073741824
|
||||
; CHECK-NEXT: ret i32 0
|
||||
;
|
||||
store atomic i32 0, i32* null monotonic, align 4
|
||||
|
@ -205,7 +205,7 @@ define i32 @test13() {
|
|||
|
||||
define i32 @test13_no_null_opt() #0 {
|
||||
; CHECK-LABEL: @test13_no_null_opt(
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null monotonic, align 536870912
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null monotonic, align 1073741824
|
||||
; CHECK-NEXT: ret i32 0
|
||||
;
|
||||
store atomic i32 0, i32* null monotonic, align 4
|
||||
|
@ -215,7 +215,7 @@ define i32 @test13_no_null_opt() #0 {
|
|||
; Would this be legal to fold? Probably?
|
||||
define i32 @test14() {
|
||||
; CHECK-LABEL: @test14(
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null seq_cst, align 536870912
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null seq_cst, align 1073741824
|
||||
; CHECK-NEXT: ret i32 0
|
||||
;
|
||||
store atomic i32 0, i32* null seq_cst, align 4
|
||||
|
@ -224,7 +224,7 @@ define i32 @test14() {
|
|||
|
||||
define i32 @test14_no_null_opt() #0 {
|
||||
; CHECK-LABEL: @test14_no_null_opt(
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null seq_cst, align 536870912
|
||||
; CHECK-NEXT: store atomic i32 0, i32* null seq_cst, align 1073741824
|
||||
; CHECK-NEXT: ret i32 0
|
||||
;
|
||||
store atomic i32 0, i32* null seq_cst, align 4
|
||||
|
|
|
@ -495,7 +495,7 @@ define i1 @test23() {
|
|||
define void @test25() {
|
||||
; CHECK-LABEL: @test25(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: store i64 poison, i64* null, align 536870912
|
||||
; CHECK-NEXT: store i64 poison, i64* null, align 1073741824
|
||||
; CHECK-NEXT: tail call void @foo25(i32 0, i64 poison)
|
||||
; CHECK-NEXT: unreachable
|
||||
;
|
||||
|
@ -613,7 +613,7 @@ declare i32 @printf(i8*, ...)
|
|||
define i32 @test29(i8* %start, i32 %X) nounwind {
|
||||
; CHECK-LABEL: @test29(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: store i64 poison, i64* null, align 536870912
|
||||
; CHECK-NEXT: store i64 poison, i64* null, align 1073741824
|
||||
; CHECK-NEXT: br i1 poison, label [[IF_THEN216:%.*]], label [[IF_END363:%.*]]
|
||||
; CHECK: if.then216:
|
||||
; CHECK-NEXT: ret i32 1
|
||||
|
|
|
@ -59,7 +59,7 @@ define i32 @test5(i1 %C) {
|
|||
|
||||
define i32 @load_gep_null_inbounds(i64 %X) {
|
||||
; CHECK-LABEL: @load_gep_null_inbounds(
|
||||
; CHECK-NEXT: store i32 poison, i32* null, align 536870912
|
||||
; CHECK-NEXT: store i32 poison, i32* null, align 1073741824
|
||||
; CHECK-NEXT: ret i32 poison
|
||||
;
|
||||
%V = getelementptr inbounds i32, i32* null, i64 %X
|
||||
|
@ -69,7 +69,7 @@ define i32 @load_gep_null_inbounds(i64 %X) {
|
|||
|
||||
define i32 @load_gep_null_not_inbounds(i64 %X) {
|
||||
; CHECK-LABEL: @load_gep_null_not_inbounds(
|
||||
; CHECK-NEXT: store i32 poison, i32* null, align 536870912
|
||||
; CHECK-NEXT: store i32 poison, i32* null, align 1073741824
|
||||
; CHECK-NEXT: ret i32 poison
|
||||
;
|
||||
%V = getelementptr i32, i32* null, i64 %X
|
||||
|
|
|
@ -57,7 +57,7 @@ define i8* @memcpy_big_const_n(i8* %d, i8* nocapture readonly %s) {
|
|||
|
||||
define i32 @PR48810() {
|
||||
; CHECK-LABEL: @PR48810(
|
||||
; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 undef, i8* align 536870912 null, i64 undef, i1 false)
|
||||
; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 undef, i8* align 1073741824 null, i64 undef, i1 false)
|
||||
; CHECK-NEXT: ret i32 undef
|
||||
;
|
||||
%r = call dereferenceable(1) i8* @mempcpy(i8* undef, i8* null, i64 undef)
|
||||
|
|
|
@ -159,7 +159,7 @@ define void @test_2(i1 %c) local_unnamed_addr {
|
|||
; CHECK: cond.true133:
|
||||
; CHECK-NEXT: br label [[COND_END144:%.*]]
|
||||
; CHECK: cond.false138:
|
||||
; CHECK-NEXT: store %type_2* poison, %type_2** null, align 536870912
|
||||
; CHECK-NEXT: store %type_2* poison, %type_2** null, align 1073741824
|
||||
; CHECK-NEXT: br label [[COND_END144]]
|
||||
; CHECK: cond.end144:
|
||||
; CHECK-NEXT: br label [[WHILE_COND]]
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
define void @test1(i32* %P) {
|
||||
; CHECK-LABEL: @test1(
|
||||
; CHECK-NEXT: store i32 123, i32* undef, align 4
|
||||
; CHECK-NEXT: store i32 poison, i32* null, align 536870912
|
||||
; CHECK-NEXT: store i32 poison, i32* null, align 1073741824
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
store i32 undef, i32* %P
|
||||
|
|
|
@ -49,9 +49,9 @@ define weak void @spmd() {
|
|||
|
||||
define weak void @parallel() {
|
||||
; CHECK-LABEL: define {{[^@]+}}@parallel() {
|
||||
; CHECK-NEXT: [[I:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* align 536870912 null, i1 true, i1 false, i1 false)
|
||||
; CHECK-NEXT: [[I:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* align 1073741824 null, i1 true, i1 false, i1 false)
|
||||
; CHECK-NEXT: call void @spmd_helper()
|
||||
; CHECK-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* noalias noundef align 536870912 null, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i8* noalias noundef align 536870912 null, i8* noalias noundef align 536870912 null, i8** noalias noundef align 536870912 null, i64 noundef 0)
|
||||
; CHECK-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* noalias noundef align 1073741824 null, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i8* noalias noundef align 1073741824 null, i8* noalias noundef align 1073741824 null, i8** noalias noundef align 1073741824 null, i64 noundef 0)
|
||||
; CHECK-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* null, i1 true, i1 false)
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
|
@ -108,7 +108,7 @@ define internal void @spmd_helper() {
|
|||
|
||||
define internal void @__kmpc_parallel_51(%struct.ident_t*, i32, i32, i32, i32, i8*, i8*, i8**, i64) {
|
||||
; CHECK-LABEL: define {{[^@]+}}@__kmpc_parallel_51
|
||||
; CHECK-SAME: (%struct.ident_t* noalias nocapture nofree readnone align 536870912 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]], i32 [[TMP4:%.*]], i8* noalias nocapture nofree readnone align 536870912 [[TMP5:%.*]], i8* noalias nocapture nofree readnone align 536870912 [[TMP6:%.*]], i8** noalias nocapture nofree readnone align 536870912 [[TMP7:%.*]], i64 [[TMP8:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-SAME: (%struct.ident_t* noalias nocapture nofree readnone align 1073741824 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]], i32 [[TMP4:%.*]], i8* noalias nocapture nofree readnone align 1073741824 [[TMP5:%.*]], i8* noalias nocapture nofree readnone align 1073741824 [[TMP6:%.*]], i8** noalias nocapture nofree readnone align 1073741824 [[TMP7:%.*]], i64 [[TMP8:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: call void @parallel_helper()
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
|
|
|
@ -52,8 +52,8 @@ entry:
|
|||
|
||||
define i8* @f7(i8** %x) {
|
||||
entry:
|
||||
%y = load i8*, i8** %x, !align !{i64 1073741824}
|
||||
%y = load i8*, i8** %x, !align !{i64 2147483648}
|
||||
ret i8* %y
|
||||
}
|
||||
; CHECK: alignment is larger that implementation defined limit
|
||||
; CHECK-NEXT: load i8*, i8** %x
|
||||
; CHECK-NEXT: load i8*, i8** %x
|
||||
|
|
|
@ -61,9 +61,9 @@ TEST(GlobalTest, CreateAddressSpace) {
|
|||
GlobalVariable::NotThreadLocal,
|
||||
1);
|
||||
|
||||
EXPECT_TRUE(Value::MaximumAlignment == 536870912U);
|
||||
Dummy0->setAlignment(Align(536870912));
|
||||
EXPECT_EQ(Dummy0->getAlignment(), 536870912U);
|
||||
EXPECT_TRUE(Value::MaximumAlignment == 1073741824U);
|
||||
Dummy0->setAlignment(Align(1073741824));
|
||||
EXPECT_EQ(Dummy0->getAlignment(), 1073741824U);
|
||||
|
||||
// Make sure the address space isn't dropped when returning this.
|
||||
Constant *Dummy1 = M->getOrInsertGlobal("dummy", Int32Ty);
|
||||
|
@ -101,7 +101,7 @@ TEST(GlobalTest, AlignDeath) {
|
|||
Constant::getAllOnesValue(Int32Ty), "var", nullptr,
|
||||
GlobalVariable::NotThreadLocal, 1);
|
||||
|
||||
EXPECT_DEATH(Var->setAlignment(Align(1073741824U)),
|
||||
EXPECT_DEATH(Var->setAlignment(Align(2147483648U)),
|
||||
"Alignment is greater than MaximumAlignment");
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue