brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 5008e38 Raw
73 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -passes=infer-alignment -S < %s | FileCheck %s3 4; ------------------------------------------------------------------------------5; Array of pair6; ------------------------------------------------------------------------------7 8; Check that we improve the alignment information.9; The base pointer is 16-byte aligned and we access the field at offsets of 810; bytes.11; Every element in the @array.simple array is 16-byte aligned so any access from12; the following gep is 8-byte aligned.13 14%pair.simple = type { ptr, i32 }15@array.simple = global [4 x %pair.simple] zeroinitializer, align 1616 17define void @simple_pair(i64 %idx) {18; CHECK-LABEL: define void @simple_pair19; CHECK-SAME: (i64 [[IDX:%.*]]) {20; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [4 x %pair.simple], ptr @array.simple, i64 0, i64 [[IDX]], i32 121; CHECK-NEXT:    [[RES:%.*]] = load i32, ptr [[GEP]], align 822; CHECK-NEXT:    store i32 0, ptr [[GEP]], align 823; CHECK-NEXT:    ret void24;25  %gep = getelementptr inbounds [4 x %pair.simple], ptr @array.simple, i64 0, i64 %idx, i32 126 27  %res = load i32, ptr %gep, align 128  store i32 0, ptr %gep, align 129 30  ret void31}32 33; ------------------------------------------------------------------------------34; Array of pair of arrays35; ------------------------------------------------------------------------------36 37%pair.array = type { [3 x i32], [3 x i32] }38@array.array = internal global [3 x %pair.array] zeroinitializer39 40define void @load_nested() {41; CHECK-LABEL: define void @load_nested() {42; CHECK-NEXT:    [[X_0:%.*]] = load i32, ptr @array.array, align 1643; CHECK-NEXT:    [[X_1:%.*]] = load i32, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 1), align 444; CHECK-NEXT:    [[X_2:%.*]] = load i32, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 2), align 845; CHECK-NEXT:    [[X_3:%.*]] = load i32, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 3), align 446; CHECK-NEXT:    [[X_4:%.*]] = load i32, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 4), align 1647; CHECK-NEXT:    ret void48;49  %x.0 =  load i32, ptr @array.array, align 450  %x.1 =  load i32, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 1), align 451  %x.2 =  load i32, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 2), align 452  %x.3 =  load i32, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 3), align 453  %x.4 =  load i32, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 4), align 454  ret void55}56 57define void @store_nested() {58; CHECK-LABEL: define void @store_nested() {59; CHECK-NEXT:    store i32 1, ptr @array.array, align 1660; CHECK-NEXT:    store i32 1, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 1), align 461; CHECK-NEXT:    store i32 1, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 2), align 862; CHECK-NEXT:    store i32 1, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 3), align 463; CHECK-NEXT:    store i32 1, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 4), align 1664; CHECK-NEXT:    ret void65;66  store i32 1, ptr @array.array, align 467  store i32 1, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 1), align 468  store i32 1, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 2), align 469  store i32 1, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 3), align 470  store i32 1, ptr getelementptr ([3 x %pair.array], ptr @array.array, i64 0, i64 0, i32 0, i64 4), align 471  ret void72}73