78 lines · plain
1; Check that equivalent parameter attributes are introduced when2; moving instructions with metadata to arguments.3 4; RUN: llvm-reduce %s -o %t --abort-on-invalid-reduction --delta-passes=operands-to-args --test FileCheck --test-arg %s --test-arg --check-prefix=INTERESTING --test-arg --input-file5; RUN: FileCheck --input-file %t --check-prefix=REDUCED %s6 7; INTERESTING-LABEL: define ptr @use_nonnull(8; REDUCED-LABEL: define ptr @use_nonnull(ptr nonnull %nonnull) {9define ptr @use_nonnull() {10 %nonnull = load ptr, ptr null, !nonnull !011 ret ptr %nonnull12}13 14; INTERESTING-LABEL: define void @use_noundef(15; REDUCED-LABEL: define void @use_noundef(ptr noundef %noundef, <2 x ptr> noundef %noundef_vec) {16define void @use_noundef() {17 %noundef = load ptr, ptr null, !noundef !018 %noundef_vec = load <2 x ptr>, ptr null, !noundef !019 store ptr %noundef, ptr null20 store <2 x ptr> %noundef_vec, ptr null21 ret void22}23 24; INTERESTING-LABEL: define ptr @use_align(25; REDUCED-LABEL: define ptr @use_align(ptr align 16 %align) {26define ptr @use_align() {27 %align = load ptr, ptr null, !align !128 ret ptr %align29}30 31; INTERESTING-LABEL: define ptr @use_dereferenceable(32; REDUCED-LABEL: define ptr @use_dereferenceable(ptr dereferenceable(12345) %deref) {33define ptr @use_dereferenceable() {34 %deref = load ptr, ptr null, !dereferenceable !235 ret ptr %deref36}37 38; INTERESTING-LABEL: define ptr @use_dereferenceable_or_null(39; REDUCED-LABEL: define ptr @use_dereferenceable_or_null(ptr dereferenceable(77777) %deref) {40define ptr @use_dereferenceable_or_null() {41 %deref = load ptr, ptr null, !dereferenceable_or_null !342 ret ptr %deref43}44 45; INTERESTING-LABEL: define void @use_range(46; REDUCED-LABEL: define void @use_range(i32 range(i32 8, 25) %simple_range, i32 range(i32 8, 420) %disjoint_range, i32 range(i32 42, 0) %wrapping_range, <2 x i32> range(i32 8, 25) %vector_range) {47define void @use_range() {48 %simple_range = load i32, ptr null, !range !449 %disjoint_range = load i32, ptr null, !range !550 %wrapping_range = load i32, ptr null, !range !651 %vector_range = load <2 x i32>, ptr null, !range !452 store i32 %simple_range, ptr null53 store i32 %disjoint_range, ptr null54 store i32 %wrapping_range, ptr null55 store <2 x i32> %vector_range, ptr null56 ret void57}58 59; INTERESTING-LABEL: define void @use_noundef_range(60; REDUCED-LABEL: define void @use_noundef_range(i32 noundef range(i32 8, 25) %load, <2 x i32> noundef range(i32 8, 25) %load_vec) {61define void @use_noundef_range() {62 %load = load i32, ptr null, !range !4, !noundef !063 %load_vec = load <2 x i32>, ptr null, !range !4, !noundef !064 store i32 %load, ptr null65 store <2 x i32> %load_vec, ptr null66 ret void67}68 69 70 71!0 = !{}72!1 = !{i64 16}73!2 = !{i64 12345}74!3 = !{i64 77777}75!4 = !{i32 8, i32 25}76!5 = !{i32 8, i32 25, i32 69, i32 420}77!6 = !{i32 42, i32 0}78