1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals all --version 5 2; Test the generation of the attribute amdgpu-no-flat-scratch-init 3; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -passes=amdgpu-attributor < %s | FileCheck -check-prefixes=GFX9 %s 4; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -passes=amdgpu-attributor < %s | FileCheck -check-prefixes=GFX10 %s 5 6;; tests of addrspacecast 7 8;. 9; GFX9: @gv.fptr0 = external hidden unnamed_addr addrspace(4) constant ptr, align 4 10;. 11; GFX10: @gv.fptr0 = external hidden unnamed_addr addrspace(4) constant ptr, align 4 12;. 13define void @without_global_to_flat_addrspacecast(ptr addrspace(1) %ptr) { 14; GFX9-LABEL: define void @without_global_to_flat_addrspacecast( 15; GFX9-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0:[0-9]+]] { 16; GFX9-NEXT: store volatile i32 0, ptr addrspace(1) [[PTR]], align 4 17; GFX9-NEXT: ret void 18; 19; GFX10-LABEL: define void @without_global_to_flat_addrspacecast( 20; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0:[0-9]+]] { 21; GFX10-NEXT: store volatile i32 0, ptr addrspace(1) [[PTR]], align 4 22; GFX10-NEXT: ret void 23; 24 store volatile i32 0, ptr addrspace(1) %ptr 25 ret void 26} 27 28define amdgpu_kernel void @without_global_to_flat_addrspacecast_cc_kernel(ptr addrspace(1) %ptr) { 29; GFX9-LABEL: define amdgpu_kernel void @without_global_to_flat_addrspacecast_cc_kernel( 30; GFX9-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] { 31; GFX9-NEXT: store volatile i32 0, ptr addrspace(1) [[PTR]], align 4 32; GFX9-NEXT: ret void 33; 34; GFX10-LABEL: define amdgpu_kernel void @without_global_to_flat_addrspacecast_cc_kernel( 35; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] { 36; GFX10-NEXT: store volatile i32 0, ptr addrspace(1) [[PTR]], align 4 37; GFX10-NEXT: ret void 38; 39 store volatile i32 0, ptr addrspace(1) %ptr 40 ret void 41} 42 43define void @with_global_to_flat_addrspacecast(ptr addrspace(1) %ptr) { 44; GFX9-LABEL: define void @with_global_to_flat_addrspacecast( 45; GFX9-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] { 46; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr 47; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 48; GFX9-NEXT: ret void 49; 50; GFX10-LABEL: define void @with_global_to_flat_addrspacecast( 51; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] { 52; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr 53; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 54; GFX10-NEXT: ret void 55; 56 %stof = addrspacecast ptr addrspace(1) %ptr to ptr 57 store volatile i32 0, ptr %stof 58 ret void 59} 60 61define amdgpu_kernel void @with_global_to_flat_addrspacecast_cc_kernel(ptr addrspace(1) %ptr) { 62; GFX9-LABEL: define amdgpu_kernel void @with_global_to_flat_addrspacecast_cc_kernel( 63; GFX9-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] { 64; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr 65; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 66; GFX9-NEXT: ret void 67; 68; GFX10-LABEL: define amdgpu_kernel void @with_global_to_flat_addrspacecast_cc_kernel( 69; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] { 70; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr 71; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 72; GFX10-NEXT: ret void 73; 74 %stof = addrspacecast ptr addrspace(1) %ptr to ptr 75 store volatile i32 0, ptr %stof 76 ret void 77} 78 79define void @without_region_to_flat_addrspacecast(ptr addrspace(2) %ptr) { 80; GFX9-LABEL: define void @without_region_to_flat_addrspacecast( 81; GFX9-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] { 82; GFX9-NEXT: store volatile i32 0, ptr addrspace(2) [[PTR]], align 4 83; GFX9-NEXT: ret void 84; 85; GFX10-LABEL: define void @without_region_to_flat_addrspacecast( 86; GFX10-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] { 87; GFX10-NEXT: store volatile i32 0, ptr addrspace(2) [[PTR]], align 4 88; GFX10-NEXT: ret void 89; 90 store volatile i32 0, ptr addrspace(2) %ptr 91 ret void 92} 93 94define amdgpu_kernel void @without_region_to_flat_addrspacecast_cc_kernel(ptr addrspace(2) %ptr) { 95; GFX9-LABEL: define amdgpu_kernel void @without_region_to_flat_addrspacecast_cc_kernel( 96; GFX9-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] { 97; GFX9-NEXT: store volatile i32 0, ptr addrspace(2) [[PTR]], align 4 98; GFX9-NEXT: ret void 99; 100; GFX10-LABEL: define amdgpu_kernel void @without_region_to_flat_addrspacecast_cc_kernel( 101; GFX10-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] { 102; GFX10-NEXT: store volatile i32 0, ptr addrspace(2) [[PTR]], align 4 103; GFX10-NEXT: ret void 104; 105 store volatile i32 0, ptr addrspace(2) %ptr 106 ret void 107} 108 109define void @with_region_to_flat_addrspacecast(ptr addrspace(2) %ptr) { 110; GFX9-LABEL: define void @with_region_to_flat_addrspacecast( 111; GFX9-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] { 112; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(2) [[PTR]] to ptr 113; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 114; GFX9-NEXT: ret void 115; 116; GFX10-LABEL: define void @with_region_to_flat_addrspacecast( 117; GFX10-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] { 118; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(2) [[PTR]] to ptr 119; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 120; GFX10-NEXT: ret void 121; 122 %stof = addrspacecast ptr addrspace(2) %ptr to ptr 123 store volatile i32 0, ptr %stof 124 ret void 125} 126 127define amdgpu_kernel void @with_region_to_flat_addrspacecast_cc_kernel(ptr addrspace(2) %ptr) { 128; GFX9-LABEL: define amdgpu_kernel void @with_region_to_flat_addrspacecast_cc_kernel( 129; GFX9-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] { 130; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(2) [[PTR]] to ptr 131; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 132; GFX9-NEXT: ret void 133; 134; GFX10-LABEL: define amdgpu_kernel void @with_region_to_flat_addrspacecast_cc_kernel( 135; GFX10-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] { 136; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(2) [[PTR]] to ptr 137; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 138; GFX10-NEXT: ret void 139; 140 %stof = addrspacecast ptr addrspace(2) %ptr to ptr 141 store volatile i32 0, ptr %stof 142 ret void 143} 144 145define void @without_group_to_flat_addrspacecast(ptr addrspace(3) %ptr) { 146; GFX9-LABEL: define void @without_group_to_flat_addrspacecast( 147; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] { 148; GFX9-NEXT: store volatile i32 0, ptr addrspace(3) [[PTR]], align 4 149; GFX9-NEXT: ret void 150; 151; GFX10-LABEL: define void @without_group_to_flat_addrspacecast( 152; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] { 153; GFX10-NEXT: store volatile i32 0, ptr addrspace(3) [[PTR]], align 4 154; GFX10-NEXT: ret void 155; 156 store volatile i32 0, ptr addrspace(3) %ptr 157 ret void 158} 159 160define amdgpu_kernel void @without_group_to_flat_addrspacecast_cc_kernel(ptr addrspace(3) %ptr) { 161; GFX9-LABEL: define amdgpu_kernel void @without_group_to_flat_addrspacecast_cc_kernel( 162; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] { 163; GFX9-NEXT: store volatile i32 0, ptr addrspace(3) [[PTR]], align 4 164; GFX9-NEXT: ret void 165; 166; GFX10-LABEL: define amdgpu_kernel void @without_group_to_flat_addrspacecast_cc_kernel( 167; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] { 168; GFX10-NEXT: store volatile i32 0, ptr addrspace(3) [[PTR]], align 4 169; GFX10-NEXT: ret void 170; 171 store volatile i32 0, ptr addrspace(3) %ptr 172 ret void 173} 174 175define void @with_group_to_flat_addrspacecast(ptr addrspace(3) %ptr) { 176; GFX9-LABEL: define void @with_group_to_flat_addrspacecast( 177; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] { 178; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr 179; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 180; GFX9-NEXT: ret void 181; 182; GFX10-LABEL: define void @with_group_to_flat_addrspacecast( 183; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] { 184; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr 185; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 186; GFX10-NEXT: ret void 187; 188 %stof = addrspacecast ptr addrspace(3) %ptr to ptr 189 store volatile i32 0, ptr %stof 190 ret void 191} 192 193define amdgpu_kernel void @with_group_to_flat_addrspacecast_cc_kernel(ptr addrspace(3) %ptr) { 194; GFX9-LABEL: define amdgpu_kernel void @with_group_to_flat_addrspacecast_cc_kernel( 195; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] { 196; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr 197; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 198; GFX9-NEXT: ret void 199; 200; GFX10-LABEL: define amdgpu_kernel void @with_group_to_flat_addrspacecast_cc_kernel( 201; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] { 202; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr 203; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 204; GFX10-NEXT: ret void 205; 206 %stof = addrspacecast ptr addrspace(3) %ptr to ptr 207 store volatile i32 0, ptr %stof 208 ret void 209} 210 211define void @without_constant_to_flat_addrspacecast(ptr addrspace(4) %ptr) { 212; GFX9-LABEL: define void @without_constant_to_flat_addrspacecast( 213; GFX9-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] { 214; GFX9-NEXT: store volatile i32 0, ptr addrspace(4) [[PTR]], align 4 215; GFX9-NEXT: ret void 216; 217; GFX10-LABEL: define void @without_constant_to_flat_addrspacecast( 218; GFX10-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] { 219; GFX10-NEXT: store volatile i32 0, ptr addrspace(4) [[PTR]], align 4 220; GFX10-NEXT: ret void 221; 222 store volatile i32 0, ptr addrspace(4) %ptr 223 ret void 224} 225 226define amdgpu_kernel void @without_constant_to_flat_addrspacecast_cc_kernel(ptr addrspace(4) %ptr) { 227; GFX9-LABEL: define amdgpu_kernel void @without_constant_to_flat_addrspacecast_cc_kernel( 228; GFX9-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] { 229; GFX9-NEXT: store volatile i32 0, ptr addrspace(4) [[PTR]], align 4 230; GFX9-NEXT: ret void 231; 232; GFX10-LABEL: define amdgpu_kernel void @without_constant_to_flat_addrspacecast_cc_kernel( 233; GFX10-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] { 234; GFX10-NEXT: store volatile i32 0, ptr addrspace(4) [[PTR]], align 4 235; GFX10-NEXT: ret void 236; 237 store volatile i32 0, ptr addrspace(4) %ptr 238 ret void 239} 240 241define void @with_constant_to_flat_addrspacecast(ptr addrspace(4) %ptr) { 242; GFX9-LABEL: define void @with_constant_to_flat_addrspacecast( 243; GFX9-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] { 244; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(4) [[PTR]] to ptr 245; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 246; GFX9-NEXT: ret void 247; 248; GFX10-LABEL: define void @with_constant_to_flat_addrspacecast( 249; GFX10-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] { 250; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(4) [[PTR]] to ptr 251; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 252; GFX10-NEXT: ret void 253; 254 %stof = addrspacecast ptr addrspace(4) %ptr to ptr 255 store volatile i32 0, ptr %stof 256 ret void 257} 258 259define amdgpu_kernel void @with_constant_to_flat_addrspacecast_cc_kernel(ptr addrspace(4) %ptr) { 260; GFX9-LABEL: define amdgpu_kernel void @with_constant_to_flat_addrspacecast_cc_kernel( 261; GFX9-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] { 262; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(4) [[PTR]] to ptr 263; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 264; GFX9-NEXT: ret void 265; 266; GFX10-LABEL: define amdgpu_kernel void @with_constant_to_flat_addrspacecast_cc_kernel( 267; GFX10-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] { 268; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(4) [[PTR]] to ptr 269; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 270; GFX10-NEXT: ret void 271; 272 %stof = addrspacecast ptr addrspace(4) %ptr to ptr 273 store volatile i32 0, ptr %stof 274 ret void 275} 276 277define void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 278; GFX9-LABEL: define void @without_private_to_flat_addrspacecast( 279; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 280; GFX9-NEXT: store volatile i32 0, ptr addrspace(5) [[PTR]], align 4 281; GFX9-NEXT: ret void 282; 283; GFX10-LABEL: define void @without_private_to_flat_addrspacecast( 284; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 285; GFX10-NEXT: store volatile i32 0, ptr addrspace(5) [[PTR]], align 4 286; GFX10-NEXT: ret void 287; 288 store volatile i32 0, ptr addrspace(5) %ptr 289 ret void 290} 291 292define amdgpu_kernel void @without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 293; GFX9-LABEL: define amdgpu_kernel void @without_private_to_flat_addrspacecast_cc_kernel( 294; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 295; GFX9-NEXT: store volatile i32 0, ptr addrspace(5) [[PTR]], align 4 296; GFX9-NEXT: ret void 297; 298; GFX10-LABEL: define amdgpu_kernel void @without_private_to_flat_addrspacecast_cc_kernel( 299; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 300; GFX10-NEXT: store volatile i32 0, ptr addrspace(5) [[PTR]], align 4 301; GFX10-NEXT: ret void 302; 303 store volatile i32 0, ptr addrspace(5) %ptr 304 ret void 305} 306 307define void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 308; GFX9-LABEL: define void @with_private_to_flat_addrspacecast( 309; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1:[0-9]+]] { 310; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 311; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 312; GFX9-NEXT: ret void 313; 314; GFX10-LABEL: define void @with_private_to_flat_addrspacecast( 315; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1:[0-9]+]] { 316; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 317; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 318; GFX10-NEXT: ret void 319; 320 %stof = addrspacecast ptr addrspace(5) %ptr to ptr 321 store volatile i32 0, ptr %stof 322 ret void 323} 324 325define amdgpu_kernel void @with_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 326; GFX9-LABEL: define amdgpu_kernel void @with_private_to_flat_addrspacecast_cc_kernel( 327; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 328; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 329; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 330; GFX9-NEXT: ret void 331; 332; GFX10-LABEL: define amdgpu_kernel void @with_private_to_flat_addrspacecast_cc_kernel( 333; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 334; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 335; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 336; GFX10-NEXT: ret void 337; 338 %stof = addrspacecast ptr addrspace(5) %ptr to ptr 339 store volatile i32 0, ptr %stof 340 ret void 341} 342 343define void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 344; GFX9-LABEL: define void @call_without_private_to_flat_addrspacecast( 345; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 346; GFX9-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 347; GFX9-NEXT: ret void 348; 349; GFX10-LABEL: define void @call_without_private_to_flat_addrspacecast( 350; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 351; GFX10-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 352; GFX10-NEXT: ret void 353; 354 call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 355 ret void 356} 357 358define amdgpu_kernel void @call_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 359; GFX9-LABEL: define amdgpu_kernel void @call_without_private_to_flat_addrspacecast_cc_kernel( 360; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 361; GFX9-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 362; GFX9-NEXT: ret void 363; 364; GFX10-LABEL: define amdgpu_kernel void @call_without_private_to_flat_addrspacecast_cc_kernel( 365; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 366; GFX10-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 367; GFX10-NEXT: ret void 368; 369 call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 370 ret void 371} 372 373define void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 374; GFX9-LABEL: define void @call_with_private_to_flat_addrspacecast( 375; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 376; GFX9-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 377; GFX9-NEXT: ret void 378; 379; GFX10-LABEL: define void @call_with_private_to_flat_addrspacecast( 380; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 381; GFX10-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 382; GFX10-NEXT: ret void 383; 384 call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 385 ret void 386} 387 388define amdgpu_kernel void @call_with_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 389; GFX9-LABEL: define amdgpu_kernel void @call_with_private_to_flat_addrspacecast_cc_kernel( 390; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 391; GFX9-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 392; GFX9-NEXT: ret void 393; 394; GFX10-LABEL: define amdgpu_kernel void @call_with_private_to_flat_addrspacecast_cc_kernel( 395; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 396; GFX10-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 397; GFX10-NEXT: ret void 398; 399 call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 400 ret void 401} 402 403define void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 404; GFX9-LABEL: define void @call_both_with_and_without_private_to_flat_addrspacecast( 405; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 406; GFX9-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 407; GFX9-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 408; GFX9-NEXT: ret void 409; 410; GFX10-LABEL: define void @call_both_with_and_without_private_to_flat_addrspacecast( 411; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 412; GFX10-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 413; GFX10-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 414; GFX10-NEXT: ret void 415; 416 call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 417 call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 418 ret void 419} 420 421define amdgpu_kernel void @call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 422; GFX9-LABEL: define amdgpu_kernel void @call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel( 423; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 424; GFX9-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 425; GFX9-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 426; GFX9-NEXT: ret void 427; 428; GFX10-LABEL: define amdgpu_kernel void @call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel( 429; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 430; GFX10-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 431; GFX10-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 432; GFX10-NEXT: ret void 433; 434 call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 435 call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 436 ret void 437} 438 439define void @call_call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 440; GFX9-LABEL: define void @call_call_without_private_to_flat_addrspacecast( 441; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 442; GFX9-NEXT: call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 443; GFX9-NEXT: ret void 444; 445; GFX10-LABEL: define void @call_call_without_private_to_flat_addrspacecast( 446; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 447; GFX10-NEXT: call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 448; GFX10-NEXT: ret void 449; 450 call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 451 ret void 452} 453 454define amdgpu_kernel void @call_call_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 455; GFX9-LABEL: define amdgpu_kernel void @call_call_without_private_to_flat_addrspacecast_cc_kernel( 456; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 457; GFX9-NEXT: call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 458; GFX9-NEXT: ret void 459; 460; GFX10-LABEL: define amdgpu_kernel void @call_call_without_private_to_flat_addrspacecast_cc_kernel( 461; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] { 462; GFX10-NEXT: call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 463; GFX10-NEXT: ret void 464; 465 call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 466 ret void 467} 468 469define void @call_call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 470; GFX9-LABEL: define void @call_call_with_private_to_flat_addrspacecast( 471; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 472; GFX9-NEXT: call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 473; GFX9-NEXT: ret void 474; 475; GFX10-LABEL: define void @call_call_with_private_to_flat_addrspacecast( 476; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 477; GFX10-NEXT: call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 478; GFX10-NEXT: ret void 479; 480 call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 481 ret void 482} 483 484define amdgpu_kernel void @call_call_with_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 485; GFX9-LABEL: define amdgpu_kernel void @call_call_with_private_to_flat_addrspacecast_cc_kernel( 486; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 487; GFX9-NEXT: call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 488; GFX9-NEXT: ret void 489; 490; GFX10-LABEL: define amdgpu_kernel void @call_call_with_private_to_flat_addrspacecast_cc_kernel( 491; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 492; GFX10-NEXT: call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 493; GFX10-NEXT: ret void 494; 495 call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 496 ret void 497} 498 499define void @call_call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 500; GFX9-LABEL: define void @call_call_both_with_and_without_private_to_flat_addrspacecast( 501; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 502; GFX9-NEXT: call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 503; GFX9-NEXT: ret void 504; 505; GFX10-LABEL: define void @call_call_both_with_and_without_private_to_flat_addrspacecast( 506; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 507; GFX10-NEXT: call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 508; GFX10-NEXT: ret void 509; 510 call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 511 ret void 512} 513 514define amdgpu_kernel void @call_call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 515; GFX9-LABEL: define amdgpu_kernel void @call_call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel( 516; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 517; GFX9-NEXT: call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 518; GFX9-NEXT: ret void 519; 520; GFX10-LABEL: define amdgpu_kernel void @call_call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel( 521; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 522; GFX10-NEXT: call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 523; GFX10-NEXT: ret void 524; 525 call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 526 ret void 527} 528 529define void @with_cast_call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 530; GFX9-LABEL: define void @with_cast_call_without_private_to_flat_addrspacecast( 531; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 532; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 533; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 534; GFX9-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 535; GFX9-NEXT: ret void 536; 537; GFX10-LABEL: define void @with_cast_call_without_private_to_flat_addrspacecast( 538; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 539; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 540; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 541; GFX10-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 542; GFX10-NEXT: ret void 543; 544 %stof = addrspacecast ptr addrspace(5) %ptr to ptr 545 store volatile i32 0, ptr %stof 546 call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 547 ret void 548} 549 550define amdgpu_kernel void @with_cast_call_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 551; GFX9-LABEL: define amdgpu_kernel void @with_cast_call_without_private_to_flat_addrspacecast_cc_kernel( 552; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 553; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 554; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 555; GFX9-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 556; GFX9-NEXT: ret void 557; 558; GFX10-LABEL: define amdgpu_kernel void @with_cast_call_without_private_to_flat_addrspacecast_cc_kernel( 559; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 560; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 561; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 562; GFX10-NEXT: call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 563; GFX10-NEXT: ret void 564; 565 %stof = addrspacecast ptr addrspace(5) %ptr to ptr 566 store volatile i32 0, ptr %stof 567 call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 568 ret void 569} 570 571define void @with_cast_call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) { 572; GFX9-LABEL: define void @with_cast_call_with_private_to_flat_addrspacecast( 573; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 574; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 575; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 576; GFX9-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 577; GFX9-NEXT: ret void 578; 579; GFX10-LABEL: define void @with_cast_call_with_private_to_flat_addrspacecast( 580; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 581; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 582; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 583; GFX10-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 584; GFX10-NEXT: ret void 585; 586 %stof = addrspacecast ptr addrspace(5) %ptr to ptr 587 store volatile i32 0, ptr %stof 588 call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 589 ret void 590} 591 592define amdgpu_kernel void @with_cast_call_with_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) { 593; GFX9-LABEL: define amdgpu_kernel void @with_cast_call_with_private_to_flat_addrspacecast_cc_kernel( 594; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 595; GFX9-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 596; GFX9-NEXT: store volatile i32 0, ptr [[STOF]], align 4 597; GFX9-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 598; GFX9-NEXT: ret void 599; 600; GFX10-LABEL: define amdgpu_kernel void @with_cast_call_with_private_to_flat_addrspacecast_cc_kernel( 601; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] { 602; GFX10-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr 603; GFX10-NEXT: store volatile i32 0, ptr [[STOF]], align 4 604; GFX10-NEXT: call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]]) 605; GFX10-NEXT: ret void 606; 607 %stof = addrspacecast ptr addrspace(5) %ptr to ptr 608 store volatile i32 0, ptr %stof 609 call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) 610 ret void 611} 612 613;; tests of addrspacecast in a constant 614 615define amdgpu_kernel void @private_constant_expression_use(ptr addrspace(1) nocapture %out) { 616; GFX9-LABEL: define amdgpu_kernel void @private_constant_expression_use( 617; GFX9-SAME: ptr addrspace(1) captures(none) [[OUT:%.*]]) #[[ATTR1]] { 618; GFX9-NEXT: store volatile ptr addrspacecast (ptr addrspace(5) inttoptr (i32 123 to ptr addrspace(5)) to ptr), ptr addrspace(1) [[OUT]], align 8 619; GFX9-NEXT: ret void 620; 621; GFX10-LABEL: define amdgpu_kernel void @private_constant_expression_use( 622; GFX10-SAME: ptr addrspace(1) captures(none) [[OUT:%.*]]) #[[ATTR1]] { 623; GFX10-NEXT: store volatile ptr addrspacecast (ptr addrspace(5) inttoptr (i32 123 to ptr addrspace(5)) to ptr), ptr addrspace(1) [[OUT]], align 8 624; GFX10-NEXT: ret void 625; 626 store volatile ptr addrspacecast (ptr addrspace(5) inttoptr (i32 123 to ptr addrspace(5)) to ptr), ptr addrspace(1) %out, align 8 627 ret void 628} 629 630;; tests of indirect call, intrinsics, inline asm 631 632@gv.fptr0 = external hidden unnamed_addr addrspace(4) constant ptr, align 4 633 634define void @with_indirect_call() { 635; GFX9-LABEL: define void @with_indirect_call( 636; GFX9-SAME: ) #[[ATTR2:[0-9]+]] { 637; GFX9-NEXT: [[FPTR:%.*]] = load ptr, ptr addrspace(4) @gv.fptr0, align 8 638; GFX9-NEXT: call void [[FPTR]]() 639; GFX9-NEXT: ret void 640; 641; GFX10-LABEL: define void @with_indirect_call( 642; GFX10-SAME: ) #[[ATTR2:[0-9]+]] { 643; GFX10-NEXT: [[FPTR:%.*]] = load ptr, ptr addrspace(4) @gv.fptr0, align 8 644; GFX10-NEXT: call void [[FPTR]]() 645; GFX10-NEXT: ret void 646; 647 %fptr = load ptr, ptr addrspace(4) @gv.fptr0 648 call void %fptr() 649 ret void 650} 651 652define amdgpu_kernel void @with_indirect_call_cc_kernel() { 653; GFX9-LABEL: define amdgpu_kernel void @with_indirect_call_cc_kernel( 654; GFX9-SAME: ) #[[ATTR2]] { 655; GFX9-NEXT: [[FPTR:%.*]] = load ptr, ptr addrspace(4) @gv.fptr0, align 8 656; GFX9-NEXT: call void [[FPTR]]() 657; GFX9-NEXT: ret void 658; 659; GFX10-LABEL: define amdgpu_kernel void @with_indirect_call_cc_kernel( 660; GFX10-SAME: ) #[[ATTR2]] { 661; GFX10-NEXT: [[FPTR:%.*]] = load ptr, ptr addrspace(4) @gv.fptr0, align 8 662; GFX10-NEXT: call void [[FPTR]]() 663; GFX10-NEXT: ret void 664; 665 %fptr = load ptr, ptr addrspace(4) @gv.fptr0 666 call void %fptr() 667 ret void 668} 669 670define void @call_with_indirect_call() { 671; GFX9-LABEL: define void @call_with_indirect_call( 672; GFX9-SAME: ) #[[ATTR2]] { 673; GFX9-NEXT: call void @with_indirect_call() 674; GFX9-NEXT: ret void 675; 676; GFX10-LABEL: define void @call_with_indirect_call( 677; GFX10-SAME: ) #[[ATTR2]] { 678; GFX10-NEXT: call void @with_indirect_call() 679; GFX10-NEXT: ret void 680; 681 call void @with_indirect_call() 682 ret void 683} 684 685define amdgpu_kernel void @call_with_indirect_call_cc_kernel() { 686; GFX9-LABEL: define amdgpu_kernel void @call_with_indirect_call_cc_kernel( 687; GFX9-SAME: ) #[[ATTR2]] { 688; GFX9-NEXT: call void @with_indirect_call() 689; GFX9-NEXT: ret void 690; 691; GFX10-LABEL: define amdgpu_kernel void @call_with_indirect_call_cc_kernel( 692; GFX10-SAME: ) #[[ATTR2]] { 693; GFX10-NEXT: call void @with_indirect_call() 694; GFX10-NEXT: ret void 695; 696 call void @with_indirect_call() 697 ret void 698} 699 700define void @empty() { 701; GFX9-LABEL: define void @empty( 702; GFX9-SAME: ) #[[ATTR0]] { 703; GFX9-NEXT: ret void 704; 705; GFX10-LABEL: define void @empty( 706; GFX10-SAME: ) #[[ATTR0]] { 707; GFX10-NEXT: ret void 708; 709 ret void 710} 711 712define void @also_empty() { 713; GFX9-LABEL: define void @also_empty( 714; GFX9-SAME: ) #[[ATTR0]] { 715; GFX9-NEXT: ret void 716; 717; GFX10-LABEL: define void @also_empty( 718; GFX10-SAME: ) #[[ATTR0]] { 719; GFX10-NEXT: ret void 720; 721 ret void 722} 723 724define amdgpu_kernel void @indirect_call_known_callees(i1 %cond) { 725; GFX9-LABEL: define amdgpu_kernel void @indirect_call_known_callees( 726; GFX9-SAME: i1 [[COND:%.*]]) #[[ATTR3:[0-9]+]] { 727; GFX9-NEXT: [[FPTR:%.*]] = select i1 [[COND]], ptr @empty, ptr @also_empty 728; GFX9-NEXT: [[TMP1:%.*]] = icmp eq ptr [[FPTR]], @also_empty 729; GFX9-NEXT: br i1 [[TMP1]], label %[[BB2:.*]], label %[[BB3:.*]] 730; GFX9: [[BB2]]: 731; GFX9-NEXT: call void @also_empty() 732; GFX9-NEXT: br label %[[BB6:.*]] 733; GFX9: [[BB3]]: 734; GFX9-NEXT: br i1 true, label %[[BB4:.*]], label %[[BB5:.*]] 735; GFX9: [[BB4]]: 736; GFX9-NEXT: call void @empty() 737; GFX9-NEXT: br label %[[BB6]] 738; GFX9: [[BB5]]: 739; GFX9-NEXT: unreachable 740; GFX9: [[BB6]]: 741; GFX9-NEXT: ret void 742; 743; GFX10-LABEL: define amdgpu_kernel void @indirect_call_known_callees( 744; GFX10-SAME: i1 [[COND:%.*]]) #[[ATTR3:[0-9]+]] { 745; GFX10-NEXT: [[FPTR:%.*]] = select i1 [[COND]], ptr @empty, ptr @also_empty 746; GFX10-NEXT: [[TMP1:%.*]] = icmp eq ptr [[FPTR]], @also_empty 747; GFX10-NEXT: br i1 [[TMP1]], label %[[BB2:.*]], label %[[BB3:.*]] 748; GFX10: [[BB2]]: 749; GFX10-NEXT: call void @also_empty() 750; GFX10-NEXT: br label %[[BB6:.*]] 751; GFX10: [[BB3]]: 752; GFX10-NEXT: br i1 true, label %[[BB4:.*]], label %[[BB5:.*]] 753; GFX10: [[BB4]]: 754; GFX10-NEXT: call void @empty() 755; GFX10-NEXT: br label %[[BB6]] 756; GFX10: [[BB5]]: 757; GFX10-NEXT: unreachable 758; GFX10: [[BB6]]: 759; GFX10-NEXT: ret void 760; 761 %fptr = select i1 %cond, ptr @empty, ptr @also_empty 762 call void %fptr() 763 ret void 764} 765 766declare i32 @llvm.amdgcn.workgroup.id.x() 767 768define void @use_intrinsic_workitem_id_x() { 769; GFX9-LABEL: define void @use_intrinsic_workitem_id_x( 770; GFX9-SAME: ) #[[ATTR5:[0-9]+]] { 771; GFX9-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x() 772; GFX9-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) null, align 4 773; GFX9-NEXT: ret void 774; 775; GFX10-LABEL: define void @use_intrinsic_workitem_id_x( 776; GFX10-SAME: ) #[[ATTR5:[0-9]+]] { 777; GFX10-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x() 778; GFX10-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) null, align 4 779; GFX10-NEXT: ret void 780; 781 %val = call i32 @llvm.amdgcn.workitem.id.x() 782 store volatile i32 %val, ptr addrspace(1) null 783 ret void 784} 785 786define amdgpu_kernel void @use_intrinsic_workitem_id_x_cc_kernel() { 787; GFX9-LABEL: define amdgpu_kernel void @use_intrinsic_workitem_id_x_cc_kernel( 788; GFX9-SAME: ) #[[ATTR0]] { 789; GFX9-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x() 790; GFX9-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) null, align 4 791; GFX9-NEXT: ret void 792; 793; GFX10-LABEL: define amdgpu_kernel void @use_intrinsic_workitem_id_x_cc_kernel( 794; GFX10-SAME: ) #[[ATTR0]] { 795; GFX10-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x() 796; GFX10-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) null, align 4 797; GFX10-NEXT: ret void 798; 799 %val = call i32 @llvm.amdgcn.workitem.id.x() 800 store volatile i32 %val, ptr addrspace(1) null 801 ret void 802} 803 804define void @call_use_intrinsic_workitem_id_x() { 805; GFX9-LABEL: define void @call_use_intrinsic_workitem_id_x( 806; GFX9-SAME: ) #[[ATTR5]] { 807; GFX9-NEXT: call void @use_intrinsic_workitem_id_x() 808; GFX9-NEXT: ret void 809; 810; GFX10-LABEL: define void @call_use_intrinsic_workitem_id_x( 811; GFX10-SAME: ) #[[ATTR5]] { 812; GFX10-NEXT: call void @use_intrinsic_workitem_id_x() 813; GFX10-NEXT: ret void 814; 815 call void @use_intrinsic_workitem_id_x() 816 ret void 817} 818 819define amdgpu_kernel void @call_use_intrinsic_workitem_id_x_cc_kernel() { 820; GFX9-LABEL: define amdgpu_kernel void @call_use_intrinsic_workitem_id_x_cc_kernel( 821; GFX9-SAME: ) #[[ATTR5]] { 822; GFX9-NEXT: call void @use_intrinsic_workitem_id_x() 823; GFX9-NEXT: ret void 824; 825; GFX10-LABEL: define amdgpu_kernel void @call_use_intrinsic_workitem_id_x_cc_kernel( 826; GFX10-SAME: ) #[[ATTR5]] { 827; GFX10-NEXT: call void @use_intrinsic_workitem_id_x() 828; GFX10-NEXT: ret void 829; 830 call void @use_intrinsic_workitem_id_x() 831 ret void 832} 833 834define amdgpu_kernel void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) %ptr) { 835; GFX9-LABEL: define amdgpu_kernel void @calls_intrin_ascast_cc_kernel( 836; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] { 837; GFX9-NEXT: [[TMP1:%.*]] = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3) [[PTR]]) 838; GFX9-NEXT: store volatile i32 7, ptr [[TMP1]], align 4 839; GFX9-NEXT: ret void 840; 841; GFX10-LABEL: define amdgpu_kernel void @calls_intrin_ascast_cc_kernel( 842; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] { 843; GFX10-NEXT: [[TMP1:%.*]] = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3) [[PTR]]) 844; GFX10-NEXT: store volatile i32 7, ptr [[TMP1]], align 4 845; GFX10-NEXT: ret void 846; 847 %1 = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3) %ptr) 848 store volatile i32 7, ptr %1, align 4 849 ret void 850} 851 852define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel(ptr addrspace(3) %ptr) { 853; GFX9-LABEL: define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel( 854; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] { 855; GFX9-NEXT: call void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) [[PTR]]) 856; GFX9-NEXT: ret void 857; 858; GFX10-LABEL: define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel( 859; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] { 860; GFX10-NEXT: call void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) [[PTR]]) 861; GFX10-NEXT: ret void 862; 863 call void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) %ptr) 864 ret void 865} 866 867define amdgpu_kernel void @with_inline_asm() { 868; GFX9-LABEL: define amdgpu_kernel void @with_inline_asm( 869; GFX9-SAME: ) #[[ATTR3]] { 870; GFX9-NEXT: call void asm sideeffect " 871; GFX9-NEXT: ret void 872; 873; GFX10-LABEL: define amdgpu_kernel void @with_inline_asm( 874; GFX10-SAME: ) #[[ATTR3]] { 875; GFX10-NEXT: call void asm sideeffect " 876; GFX10-NEXT: ret void 877; 878 call void asm sideeffect "; use $0", "a"(i32 poison) 879 ret void 880} 881 882;. 883; GFX9: attributes #[[ATTR0]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" } 884; GFX9: attributes #[[ATTR1]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" } 885; GFX9: attributes #[[ATTR2]] = { "target-cpu"="gfx900" "uniform-work-group-size"="false" } 886; GFX9: attributes #[[ATTR3]] = { "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" } 887; GFX9: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) "target-cpu"="gfx900" } 888; GFX9: attributes #[[ATTR5]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" } 889;. 890; GFX10: attributes #[[ATTR0]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx1010" "uniform-work-group-size"="false" } 891; GFX10: attributes #[[ATTR1]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx1010" "uniform-work-group-size"="false" } 892; GFX10: attributes #[[ATTR2]] = { "target-cpu"="gfx1010" "uniform-work-group-size"="false" } 893; GFX10: attributes #[[ATTR3]] = { "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx1010" "uniform-work-group-size"="false" } 894; GFX10: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) "target-cpu"="gfx1010" } 895; GFX10: attributes #[[ATTR5]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx1010" "uniform-work-group-size"="false" } 896;. 897