brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · b3f9fb0 Raw
104 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes2; RUN: opt < %s -passes=argpromotion -S | FileCheck %s3 4declare void @use.i32(i32)5declare void @use.p32(ptr)6 7define internal void @callee(ptr %p1, ptr %p2, ptr %p3, ptr %p4, ptr %p5, ptr %p6, ptr %p7, ptr %p8, ptr %p9, ptr %p10) {8; CHECK-LABEL: define {{[^@]+}}@callee9; CHECK-SAME: (i32 [[P1_0_VAL:%.*]], i32 [[P2_0_VAL:%.*]], ptr [[P3_0_VAL:%.*]], ptr [[P4_0_VAL:%.*]], ptr [[P5_0_VAL:%.*]], ptr [[P6_0_VAL:%.*]], ptr [[P7_0_VAL:%.*]], ptr [[P8_0_VAL:%.*]], ptr [[P9_0_VAL:%.*]], ptr [[P10_0_VAL:%.*]]) {10; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne ptr [[P4_0_VAL]], null11; CHECK-NEXT:    call void @llvm.assume(i1 [[TMP1]])12; CHECK-NEXT:    call void @use.i32(i32 [[P1_0_VAL]])13; CHECK-NEXT:    call void @use.i32(i32 [[P2_0_VAL]])14; CHECK-NEXT:    call void @use.p32(ptr [[P3_0_VAL]])15; CHECK-NEXT:    call void @use.p32(ptr [[P4_0_VAL]])16; CHECK-NEXT:    call void @use.p32(ptr [[P5_0_VAL]])17; CHECK-NEXT:    call void @use.p32(ptr [[P6_0_VAL]])18; CHECK-NEXT:    call void @use.p32(ptr [[P7_0_VAL]])19; CHECK-NEXT:    call void @use.p32(ptr [[P8_0_VAL]])20; CHECK-NEXT:    call void @use.p32(ptr [[P9_0_VAL]])21; CHECK-NEXT:    call void @use.p32(ptr [[P10_0_VAL]])22; CHECK-NEXT:    ret void23;24  %v1 = load i32, ptr %p1, !range !025  %v2 = load i32, ptr %p2, !range !0, !noundef !126  %v3 = load ptr, ptr %p3, !nonnull !127  %v4 = load ptr, ptr %p4, !nonnull !1, !noundef !128  %v5 = load ptr, ptr %p5, !dereferenceable !229  %v6 = load ptr, ptr %p6, !dereferenceable_or_null !230  %v7 = load ptr, ptr %p7, !align !331  %v8 = load ptr, ptr %p8, !align !3, !noundef !132  %v9 = load ptr, ptr %p9, !noundef !133  %v10 = load ptr, ptr %p10, !nontemporal !434  call void @use.i32(i32 %v1)35  call void @use.i32(i32 %v2)36  call void @use.p32(ptr %v3)37  call void @use.p32(ptr %v4)38  call void @use.p32(ptr %v5)39  call void @use.p32(ptr %v6)40  call void @use.p32(ptr %v7)41  call void @use.p32(ptr %v8)42  call void @use.p32(ptr %v9)43  call void @use.p32(ptr %v10)44  ret void45}46 47define void @caller(ptr %p1, ptr %p2, ptr %p3, ptr %p4, ptr %p5, ptr %p6, ptr %p7, ptr %p8, ptr %p9, ptr %p10) {48; CHECK-LABEL: define {{[^@]+}}@caller49; CHECK-SAME: (ptr [[P1:%.*]], ptr [[P2:%.*]], ptr [[P3:%.*]], ptr [[P4:%.*]], ptr [[P5:%.*]], ptr [[P6:%.*]], ptr [[P7:%.*]], ptr [[P8:%.*]], ptr [[P9:%.*]], ptr [[P10:%.*]]) {50; CHECK-NEXT:    [[P1_VAL:%.*]] = load i32, ptr [[P1]], align 451; CHECK-NEXT:    [[P2_VAL:%.*]] = load i32, ptr [[P2]], align 4, !range [[RNG0:![0-9]+]], !noundef !152; CHECK-NEXT:    [[P3_VAL:%.*]] = load ptr, ptr [[P3]], align 853; CHECK-NEXT:    [[P4_VAL:%.*]] = load ptr, ptr [[P4]], align 8, !nonnull !1, !noundef !154; CHECK-NEXT:    [[P5_VAL:%.*]] = load ptr, ptr [[P5]], align 8, !dereferenceable !255; CHECK-NEXT:    [[P6_VAL:%.*]] = load ptr, ptr [[P6]], align 8, !dereferenceable_or_null !256; CHECK-NEXT:    [[P7_VAL:%.*]] = load ptr, ptr [[P7]], align 857; CHECK-NEXT:    [[P8_VAL:%.*]] = load ptr, ptr [[P8]], align 8, !align !3, !noundef !158; CHECK-NEXT:    [[P9_VAL:%.*]] = load ptr, ptr [[P9]], align 8, !noundef !159; CHECK-NEXT:    [[P10_VAL:%.*]] = load ptr, ptr [[P10]], align 8, !nontemporal !460; CHECK-NEXT:    call void @callee(i32 [[P1_VAL]], i32 [[P2_VAL]], ptr [[P3_VAL]], ptr [[P4_VAL]], ptr [[P5_VAL]], ptr [[P6_VAL]], ptr [[P7_VAL]], ptr [[P8_VAL]], ptr [[P9_VAL]], ptr [[P10_VAL]])61; CHECK-NEXT:    ret void62;63  call void @callee(ptr %p1, ptr %p2, ptr %p3, ptr %p4, ptr %p5, ptr %p6, ptr %p7, ptr %p8, ptr %p9, ptr %p10)64  ret void65}66 67define internal ptr @callee_conditional(i1 %c, ptr dereferenceable(8) align 8 %p) {68; CHECK-LABEL: define {{[^@]+}}@callee_conditional69; CHECK-SAME: (i1 [[C:%.*]], ptr [[P_0_VAL:%.*]]) {70; CHECK-NEXT:    br i1 [[C]], label [[IF:%.*]], label [[ELSE:%.*]]71; CHECK:       if:72; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne ptr [[P_0_VAL]], null73; CHECK-NEXT:    call void @llvm.assume(i1 [[TMP1]])74; CHECK-NEXT:    ret ptr [[P_0_VAL]]75; CHECK:       else:76; CHECK-NEXT:    ret ptr null77;78  br i1 %c, label %if, label %else79 80if:81  %v = load ptr, ptr %p, !nonnull !1, !noundef !182  ret ptr %v83 84else:85  ret ptr null86}87 88define void @caller_conditional(i1 %c, ptr %p) {89; CHECK-LABEL: define {{[^@]+}}@caller_conditional90; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]]) {91; CHECK-NEXT:    [[P_VAL:%.*]] = load ptr, ptr [[P]], align 892; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @callee_conditional(i1 [[C]], ptr [[P_VAL]])93; CHECK-NEXT:    ret void94;95  call ptr @callee_conditional(i1 %c, ptr %p)96  ret void97}98 99!0 = !{i32 0, i32 4}100!1 = !{}101!2 = !{i64 8}102!3 = !{i64 4}103!4 = !{i32 1}104