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