brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 659d133 Raw
138 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -S -passes=argpromotion < %s | FileCheck %s3target datalayout = "e-p:64:64-p5:32:32-p6:128:128:128:128"4 5; Maximum alignment value of the load in a 64-bit address space6; exceeds the bitwidth of the definition address space.7define void @entry0() {8; CHECK-LABEL: define void @entry0() {9; CHECK-NEXT:  bb:10; CHECK-NEXT:    call void @call_load_maxalign_alloca_16()11; CHECK-NEXT:    ret void12;13bb:14  call void @call_load_maxalign_alloca_16()15  ret void16}17 18define internal void @call_load_maxalign_alloca_16() {19; CHECK-LABEL: define internal void @call_load_maxalign_alloca_16() {20; CHECK-NEXT:  bb:21; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca [13 x i16], align 16, addrspace(5)22; CHECK-NEXT:    [[ADDRSPACECAST:%.*]] = addrspacecast ptr addrspace(5) [[ALLOCA]] to ptr23; CHECK-NEXT:    call void @load_maxalign0(ptr [[ADDRSPACECAST]])24; CHECK-NEXT:    ret void25;26bb:27  %alloca = alloca [13 x i16], align 16, addrspace(5)28  %addrspacecast = addrspacecast ptr addrspace(5) %alloca to ptr29  call void @load_maxalign0(ptr %addrspacecast)30  ret void31}32 33define internal void @load_maxalign0(ptr %arg) {34; CHECK-LABEL: define internal void @load_maxalign035; CHECK-SAME: (ptr [[ARG:%.*]]) {36; CHECK-NEXT:  bb:37; CHECK-NEXT:    br label [[BB1:%.*]]38; CHECK:       bb1:39; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[ARG]], align 429496729640; CHECK-NEXT:    ret void41;42bb:43  br label %bb144 45bb1:                                              ; preds = %bb46  %load = load i32, ptr %arg, align 429496729647  ret void48}49 50; Make sure the early exit alignment check isn't hiding the offset51; overflow.52define void @entry1() {53; CHECK-LABEL: define void @entry1() {54; CHECK-NEXT:  bb:55; CHECK-NEXT:    call void @call_load_maxalign_alloca_maxalign()56; CHECK-NEXT:    ret void57;58bb:59  call void @call_load_maxalign_alloca_maxalign()60  ret void61}62 63define internal void @call_load_maxalign_alloca_maxalign() {64; CHECK-LABEL: define internal void @call_load_maxalign_alloca_maxalign() {65; CHECK-NEXT:  bb:66; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca [13 x i16], align 4294967296, addrspace(5)67; CHECK-NEXT:    [[ADDRSPACECAST:%.*]] = addrspacecast ptr addrspace(5) [[ALLOCA]] to ptr68; CHECK-NEXT:    [[ADDRSPACECAST_VAL:%.*]] = load i32, ptr [[ADDRSPACECAST]], align 429496729669; CHECK-NEXT:    call void @load_maxalign1(i32 [[ADDRSPACECAST_VAL]])70; CHECK-NEXT:    ret void71;72bb:73  %alloca = alloca [13 x i16], align 4294967296, addrspace(5)74  %addrspacecast = addrspacecast ptr addrspace(5) %alloca to ptr75  call void @load_maxalign1(ptr %addrspacecast)76  ret void77}78 79define internal void @load_maxalign1(ptr %arg) {80; CHECK-LABEL: define internal void @load_maxalign181; CHECK-SAME: (i32 [[ARG_0_VAL:%.*]]) {82; CHECK-NEXT:  bb:83; CHECK-NEXT:    br label [[BB1:%.*]]84; CHECK:       bb1:85; CHECK-NEXT:    ret void86;87bb:88  br label %bb189 90bb1:                                              ; preds = %bb91  %load = load i32, ptr %arg, align 429496729692  ret void93}94 95; Alignment value exceeds pointer size, more than 1 past the end96define void @entry2() {97; CHECK-LABEL: define void @entry2() {98; CHECK-NEXT:  bb:99; CHECK-NEXT:    call void @call_load_maxalign_alloca_ptr128()100; CHECK-NEXT:    ret void101;102bb:103  call void @call_load_maxalign_alloca_ptr128()104  ret void105}106 107define internal void @call_load_maxalign_alloca_ptr128() {108; CHECK-LABEL: define internal void @call_load_maxalign_alloca_ptr128() {109; CHECK-NEXT:  bb:110; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca [13 x i16], align 4294967296, addrspace(6)111; CHECK-NEXT:    [[ADDRSPACECAST:%.*]] = addrspacecast ptr addrspace(6) [[ALLOCA]] to ptr112; CHECK-NEXT:    [[ADDRSPACECAST_VAL:%.*]] = load i32, ptr [[ADDRSPACECAST]], align 4294967296113; CHECK-NEXT:    call void @load_maxalign2(i32 [[ADDRSPACECAST_VAL]])114; CHECK-NEXT:    ret void115;116bb:117  %alloca = alloca [13 x i16], align 4294967296, addrspace(6)118  %addrspacecast = addrspacecast ptr addrspace(6) %alloca to ptr119  call void @load_maxalign2(ptr %addrspacecast)120  ret void121}122 123define internal void @load_maxalign2(ptr %arg) {124; CHECK-LABEL: define internal void @load_maxalign2125; CHECK-SAME: (i32 [[ARG_0_VAL:%.*]]) {126; CHECK-NEXT:  bb:127; CHECK-NEXT:    br label [[BB1:%.*]]128; CHECK:       bb1:129; CHECK-NEXT:    ret void130;131bb:132  br label %bb1133 134bb1:                                              ; preds = %bb135  %load = load i32, ptr %arg, align 4294967296136  ret void137}138