1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 2; RUN: opt < %s -passes=instsimplify -S | FileCheck %s 3 4target datalayout = "p1:64:64:64:32" 5 6declare ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) , i32) 7declare ptr @llvm.ptrmask.p0.i64(ptr, i64) 8 9declare <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) >, <2 x i32>) 10declare <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr>, <2 x i64>) 11 12define ptr @ptrmask_simplify_poison_mask(ptr %p) { 13; CHECK-LABEL: define ptr @ptrmask_simplify_poison_mask 14; CHECK-SAME: (ptr [[P:%.*]]) { 15; CHECK-NEXT: ret ptr poison 16; 17 %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 poison) 18 ret ptr %r 19} 20 21define <2 x ptr addrspace(1) > @ptrmask_simplify_poison_mask_vec(<2 x ptr addrspace(1) > %p) { 22; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_simplify_poison_mask_vec 23; CHECK-SAME: (<2 x ptr addrspace(1)> [[P:%.*]]) { 24; CHECK-NEXT: ret <2 x ptr addrspace(1)> poison 25; 26 %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p, <2 x i32> poison) 27 ret <2 x ptr addrspace(1) > %r 28} 29 30define <2 x ptr addrspace(1) > @ptrmask_simplify_poison_and_zero_i32_vec_fail(<2 x ptr addrspace(1) > %p) { 31; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_simplify_poison_and_zero_i32_vec_fail 32; CHECK-SAME: (<2 x ptr addrspace(1)> [[P:%.*]]) { 33; CHECK-NEXT: [[R:%.*]] = call <2 x ptr addrspace(1)> @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1)> [[P]], <2 x i32> <i32 undef, i32 0>) 34; CHECK-NEXT: ret <2 x ptr addrspace(1)> [[R]] 35; 36 %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p, <2 x i32> <i32 undef, i32 0>) 37 ret <2 x ptr addrspace(1) > %r 38} 39 40define <2 x ptr> @ptrmask_simplify_undef_and_ones_vec(<2 x ptr> %p) { 41; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_undef_and_ones_vec 42; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 43; CHECK-NEXT: [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 undef, i64 -1>) 44; CHECK-NEXT: ret <2 x ptr> [[R]] 45; 46 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 undef, i64 -1>) 47 ret <2 x ptr> %r 48} 49 50define <2 x ptr> @ptrmask_simplify_poison_and_ones_vec(<2 x ptr> %p) { 51; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_poison_and_ones_vec 52; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 53; CHECK-NEXT: ret <2 x ptr> [[P]] 54; 55 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 poison, i64 -1>) 56 ret <2 x ptr> %r 57} 58 59define <2 x ptr> @ptrmask_simplify_ones_vec(<2 x ptr> %p) { 60; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_ones_vec 61; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 62; CHECK-NEXT: ret <2 x ptr> [[P]] 63; 64 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -1, i64 -1>) 65 ret <2 x ptr> %r 66} 67 68define <2 x ptr addrspace(1) > @ptrmask_simplify_ones_i32_vec(<2 x ptr addrspace(1) > %p) { 69; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_simplify_ones_i32_vec 70; CHECK-SAME: (<2 x ptr addrspace(1)> [[P:%.*]]) { 71; CHECK-NEXT: ret <2 x ptr addrspace(1)> [[P]] 72; 73 %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p, <2 x i32> <i32 -1, i32 -1>) 74 ret <2 x ptr addrspace(1) > %r 75} 76 77define ptr addrspace(1) @ptrmask_simplify_undef_mask(ptr addrspace(1) %p) { 78; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_undef_mask 79; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) { 80; CHECK-NEXT: ret ptr addrspace(1) [[P]] 81; 82 %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 undef) 83 ret ptr addrspace(1) %r 84} 85 86define ptr @ptrmask_simplify_0_mask(ptr %p) { 87; CHECK-LABEL: define ptr @ptrmask_simplify_0_mask 88; CHECK-SAME: (ptr [[P:%.*]]) { 89; CHECK-NEXT: [[R:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 0) 90; CHECK-NEXT: ret ptr [[R]] 91; 92 %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 0) 93 ret ptr %r 94} 95 96define ptr @ptrmask_simplify_1s_mask(ptr %p) { 97; CHECK-LABEL: define ptr @ptrmask_simplify_1s_mask 98; CHECK-SAME: (ptr [[P:%.*]]) { 99; CHECK-NEXT: ret ptr [[P]] 100; 101 %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -1) 102 ret ptr %r 103} 104 105define ptr addrspace(1) @ptrmask_simplify_1s_mask_i32(ptr addrspace(1) %p) { 106; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_1s_mask_i32 107; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) { 108; CHECK-NEXT: ret ptr addrspace(1) [[P]] 109; 110 %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 -1) 111 ret ptr addrspace(1) %r 112} 113 114define ptr @ptrmask_simplify_poison_ptr(i64 %m) { 115; CHECK-LABEL: define ptr @ptrmask_simplify_poison_ptr 116; CHECK-SAME: (i64 [[M:%.*]]) { 117; CHECK-NEXT: ret ptr poison 118; 119 %r = call ptr @llvm.ptrmask.p0.i64(ptr poison, i64 %m) 120 ret ptr %r 121} 122 123define ptr addrspace(1) @ptrmask_simplify_undef_ptr(i32 %m) { 124; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_undef_ptr 125; CHECK-SAME: (i32 [[M:%.*]]) { 126; CHECK-NEXT: ret ptr addrspace(1) null 127; 128 %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) undef, i32 %m) 129 ret ptr addrspace(1) %r 130} 131 132define ptr @ptrmask_simplify_null_ptr(i64 %m) { 133; CHECK-LABEL: define ptr @ptrmask_simplify_null_ptr 134; CHECK-SAME: (i64 [[M:%.*]]) { 135; CHECK-NEXT: ret ptr null 136; 137 %r = call ptr @llvm.ptrmask.p0.i64(ptr null, i64 %m) 138 ret ptr %r 139} 140 141define ptr @ptrmask_simplify_ptrmask(ptr %p) { 142; CHECK-LABEL: define ptr @ptrmask_simplify_ptrmask 143; CHECK-SAME: (ptr [[P:%.*]]) { 144; CHECK-NEXT: ret ptr [[P]] 145; 146 %m = ptrtoint ptr %p to i64 147 %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 %m) 148 ret ptr %r 149} 150 151define ptr addrspace(1) @ptrmask_simplify_ptrmask_i32(ptr addrspace(1) %p) { 152; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_ptrmask_i32 153; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) { 154; CHECK-NEXT: ret ptr addrspace(1) [[P]] 155; 156 %m = ptrtoint ptr addrspace(1) %p to i32 157 %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 %m) 158 ret ptr addrspace(1) %r 159} 160 161define ptr @ptrmask_simplify_aligned_unused(ptr align 64 %p) { 162; CHECK-LABEL: define ptr @ptrmask_simplify_aligned_unused 163; CHECK-SAME: (ptr align 64 [[P:%.*]]) { 164; CHECK-NEXT: ret ptr [[P]] 165; 166 %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -64) 167 ret ptr %r 168} 169 170define <2 x ptr> @ptrmask_simplify_aligned_unused_vec(<2 x ptr> align 128 %p) { 171; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_aligned_unused_vec 172; CHECK-SAME: (<2 x ptr> align 128 [[P:%.*]]) { 173; CHECK-NEXT: [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> splat (i64 -64)) 174; CHECK-NEXT: ret <2 x ptr> [[R]] 175; 176 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>) 177 ret <2 x ptr> %r 178} 179 180define <2 x ptr> @ptrmask_simplify_aligned_unused_vec_todo(<2 x ptr> align 128 %p) { 181; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_aligned_unused_vec_todo 182; CHECK-SAME: (<2 x ptr> align 128 [[P:%.*]]) { 183; CHECK-NEXT: [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>) 184; CHECK-NEXT: ret <2 x ptr> [[R]] 185; 186 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>) 187 ret <2 x ptr> %r 188} 189 190define ptr addrspace(1) @ptrmask_simplify_aligned_unused_i32(ptr addrspace(1) align 64 %p) { 191; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_aligned_unused_i32 192; CHECK-SAME: (ptr addrspace(1) align 64 [[P:%.*]]) { 193; CHECK-NEXT: ret ptr addrspace(1) [[P]] 194; 195 %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 -64) 196 ret ptr addrspace(1) %r 197} 198 199define ptr @ptrmask_simplify_known_unused(ptr %p) { 200; CHECK-LABEL: define ptr @ptrmask_simplify_known_unused 201; CHECK-SAME: (ptr [[P:%.*]]) { 202; CHECK-NEXT: [[PM0:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 -64) 203; CHECK-NEXT: [[PGEP:%.*]] = getelementptr i8, ptr [[PM0]], i64 32 204; CHECK-NEXT: ret ptr [[PGEP]] 205; 206 %pm0 = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -64) 207 %pgep = getelementptr i8, ptr %pm0, i64 32 208 %r = call ptr @llvm.ptrmask.p0.i64(ptr %pgep, i64 -32) 209 ret ptr %r 210} 211 212define <2 x ptr> @ptrmask_simplify_known_unused_vec(<2 x ptr> %p) { 213; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec 214; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 215; CHECK-NEXT: [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> splat (i64 -64)) 216; CHECK-NEXT: [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32) 217; CHECK-NEXT: ret <2 x ptr> [[PGEP]] 218; 219 %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>) 220 %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32> 221 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>) 222 ret <2 x ptr> %r 223} 224 225define <2 x ptr> @ptrmask_simplify_known_unused_vec2(<2 x ptr> %p) { 226; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec2 227; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 228; CHECK-NEXT: [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> splat (i64 -64)) 229; CHECK-NEXT: [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32) 230; CHECK-NEXT: ret <2 x ptr> [[PGEP]] 231; 232 %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>) 233 %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32> 234 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -16>) 235 ret <2 x ptr> %r 236} 237 238define <2 x ptr> @ptrmask_simplify_known_unused_vec3(<2 x ptr> %p) { 239; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec3 240; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 241; CHECK-NEXT: [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>) 242; CHECK-NEXT: [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32) 243; CHECK-NEXT: ret <2 x ptr> [[PGEP]] 244; 245 %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>) 246 %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32> 247 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>) 248 ret <2 x ptr> %r 249} 250 251define <2 x ptr> @ptrmask_simplify_known_unused_vec4(<2 x ptr> %p) { 252; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec4 253; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 254; CHECK-NEXT: [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>) 255; CHECK-NEXT: [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 32, i64 64> 256; CHECK-NEXT: ret <2 x ptr> [[PGEP]] 257; 258 %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>) 259 %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 64> 260 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>) 261 ret <2 x ptr> %r 262} 263 264define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail(<2 x ptr> %p) { 265; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail 266; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 267; CHECK-NEXT: [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>) 268; CHECK-NEXT: [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 16, i64 64> 269; CHECK-NEXT: [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> splat (i64 -32)) 270; CHECK-NEXT: ret <2 x ptr> [[R]] 271; 272 %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>) 273 %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 16, i64 64> 274 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>) 275 ret <2 x ptr> %r 276} 277 278define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail2(<2 x ptr> %p) { 279; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail2 280; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 281; CHECK-NEXT: [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> splat (i64 -64)) 282; CHECK-NEXT: [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32) 283; CHECK-NEXT: [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> <i64 -32, i64 -64>) 284; CHECK-NEXT: ret <2 x ptr> [[R]] 285; 286 %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>) 287 %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32> 288 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -64>) 289 ret <2 x ptr> %r 290} 291 292define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail3(<2 x ptr> %p) { 293; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail3 294; CHECK-SAME: (<2 x ptr> [[P:%.*]]) { 295; CHECK-NEXT: [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -16>) 296; CHECK-NEXT: [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32) 297; CHECK-NEXT: [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> splat (i64 -32)) 298; CHECK-NEXT: ret <2 x ptr> [[R]] 299; 300 %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -16>) 301 %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32> 302 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>) 303 ret <2 x ptr> %r 304} 305 306define ptr @ptrmask_maintain_provenance_i64(ptr %p0) { 307; CHECK-LABEL: define ptr @ptrmask_maintain_provenance_i64 308; CHECK-SAME: (ptr [[P0:%.*]]) { 309; CHECK-NEXT: [[R:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P0]], i64 0) 310; CHECK-NEXT: ret ptr [[R]] 311; 312 %r = call ptr @llvm.ptrmask.p0.i64(ptr %p0, i64 0) 313 ret ptr %r 314} 315 316define ptr addrspace(1) @ptrmask_maintain_provenance_i32(ptr addrspace(1) %p0) { 317; CHECK-LABEL: define ptr addrspace(1) @ptrmask_maintain_provenance_i32 318; CHECK-SAME: (ptr addrspace(1) [[P0:%.*]]) { 319; CHECK-NEXT: [[R:%.*]] = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) [[P0]], i32 0) 320; CHECK-NEXT: ret ptr addrspace(1) [[R]] 321; 322 %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p0, i32 0) 323 ret ptr addrspace(1) %r 324} 325 326define <2 x ptr> @ptrmask_maintain_provenance_v2i64(<2 x ptr> %p0) { 327; CHECK-LABEL: define <2 x ptr> @ptrmask_maintain_provenance_v2i64 328; CHECK-SAME: (<2 x ptr> [[P0:%.*]]) { 329; CHECK-NEXT: [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P0]], <2 x i64> zeroinitializer) 330; CHECK-NEXT: ret <2 x ptr> [[R]] 331; 332 %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p0, <2 x i64> zeroinitializer) 333 ret <2 x ptr> %r 334} 335 336define <2 x ptr addrspace(1) > @ptrmask_maintain_provenance_v2i32(<2 x ptr addrspace(1) > %p0) { 337; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_maintain_provenance_v2i32 338; CHECK-SAME: (<2 x ptr addrspace(1)> [[P0:%.*]]) { 339; CHECK-NEXT: [[R:%.*]] = call <2 x ptr addrspace(1)> @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1)> [[P0]], <2 x i32> zeroinitializer) 340; CHECK-NEXT: ret <2 x ptr addrspace(1)> [[R]] 341; 342 %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p0, <2 x i32> zeroinitializer) 343 ret <2 x ptr addrspace(1) > %r 344} 345