3
3
4
4
// Make sure that we do not set inbounds flag if the base pointer may be a constant null.
5
5
6
- // CHECK-LABEL: define dso_local noalias ptr @glibc_ptr_align(
6
+ // CHECK-LABEL: define dso_local ptr @glibc_ptr_align(
7
7
// CHECK-SAME: ptr noundef readnone captures(none) [[BASE:%.*]], ptr noundef [[POINTER:%.*]], i64 noundef [[ALIGN_MASK:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
8
8
// CHECK-NEXT: [[ENTRY:.*:]]
9
9
// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[POINTER]] to i64
10
10
// CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[ALIGN_MASK]], [[SUB_PTR_LHS_CAST]]
11
11
// CHECK-NEXT: [[NOT:%.*]] = xor i64 [[ALIGN_MASK]], -1
12
12
// CHECK-NEXT: [[AND:%.*]] = and i64 [[ADD]], [[NOT]]
13
- // CHECK-NEXT: [[ADD_PTR :%.*]] = getelementptr inbounds i8, ptr null, i64 [[AND]]
14
- // CHECK-NEXT: ret ptr [[ADD_PTR ]]
13
+ // CHECK-NEXT: [[TMP0 :%.*]] = inttoptr i64 [[AND]] to ptr
14
+ // CHECK-NEXT: ret ptr [[TMP0 ]]
15
15
//
16
16
char * glibc_ptr_align (char * base , char * pointer , long align_mask ) {
17
17
return (sizeof (long int ) < sizeof (void * ) ? (base ) : (char * )0 ) +
@@ -21,15 +21,15 @@ char *glibc_ptr_align(char *base, char *pointer, long align_mask) {
21
21
~(align_mask ));
22
22
}
23
23
24
- // CHECK-LABEL: define dso_local noalias ptr @glibc_ptr_align_commuted(
24
+ // CHECK-LABEL: define dso_local ptr @glibc_ptr_align_commuted(
25
25
// CHECK-SAME: ptr noundef readnone captures(none) [[BASE:%.*]], ptr noundef [[POINTER:%.*]], i64 noundef [[ALIGN_MASK:%.*]]) local_unnamed_addr #[[ATTR0]] {
26
26
// CHECK-NEXT: [[ENTRY:.*:]]
27
27
// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[POINTER]] to i64
28
28
// CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[ALIGN_MASK]], [[SUB_PTR_LHS_CAST]]
29
29
// CHECK-NEXT: [[NOT:%.*]] = xor i64 [[ALIGN_MASK]], -1
30
30
// CHECK-NEXT: [[AND:%.*]] = and i64 [[ADD]], [[NOT]]
31
- // CHECK-NEXT: [[ADD_PTR :%.*]] = getelementptr inbounds i8, ptr null, i64 [[AND]]
32
- // CHECK-NEXT: ret ptr [[ADD_PTR ]]
31
+ // CHECK-NEXT: [[TMP0 :%.*]] = inttoptr i64 [[AND]] to ptr
32
+ // CHECK-NEXT: ret ptr [[TMP0 ]]
33
33
//
34
34
char * glibc_ptr_align_commuted (char * base , char * pointer , long align_mask ) {
35
35
return (sizeof (long int ) >= sizeof (void * ) ? (char * )0 : (base )) +
0 commit comments