1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals 2; RUN: opt -mtriple=amdgcn-unknown-amdhsa -S -amdgpu-annotate-kernel-features < %s | FileCheck -check-prefixes=AKF_HSA %s 3; RUN: opt -mtriple=amdgcn-unknown-amdhsa -S -amdgpu-attributor < %s | FileCheck -check-prefixes=ATTRIBUTOR_HSA %s 4 5; TODO: The test contains UB which is refined by the Attributor and should be removed. 6 7declare i32 @llvm.amdgcn.workgroup.id.x() #0 8declare i32 @llvm.amdgcn.workgroup.id.y() #0 9declare i32 @llvm.amdgcn.workgroup.id.z() #0 10 11declare i32 @llvm.amdgcn.workitem.id.x() #0 12declare i32 @llvm.amdgcn.workitem.id.y() #0 13declare i32 @llvm.amdgcn.workitem.id.z() #0 14 15declare i8 addrspace(4)* @llvm.amdgcn.dispatch.ptr() #0 16declare i8 addrspace(4)* @llvm.amdgcn.queue.ptr() #0 17declare i8 addrspace(4)* @llvm.amdgcn.kernarg.segment.ptr() #0 18declare i8 addrspace(4)* @llvm.amdgcn.implicitarg.ptr() #0 19declare i64 @llvm.amdgcn.dispatch.id() #0 20 21define void @use_workitem_id_x() #1 { 22; AKF_HSA-LABEL: define {{[^@]+}}@use_workitem_id_x 23; AKF_HSA-SAME: () #[[ATTR1:[0-9]+]] { 24; AKF_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x() 25; AKF_HSA-NEXT: store volatile i32 [[VAL]], i32 addrspace(1)* undef, align 4 26; AKF_HSA-NEXT: ret void 27; 28; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_x 29; ATTRIBUTOR_HSA-SAME: () #[[ATTR1:[0-9]+]] { 30; ATTRIBUTOR_HSA-NEXT: ret void 31; 32 %val = call i32 @llvm.amdgcn.workitem.id.x() 33 store volatile i32 %val, i32 addrspace(1)* undef 34 ret void 35} 36 37define void @use_workitem_id_y() #1 { 38; AKF_HSA-LABEL: define {{[^@]+}}@use_workitem_id_y 39; AKF_HSA-SAME: () #[[ATTR2:[0-9]+]] { 40; AKF_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.y() 41; AKF_HSA-NEXT: store volatile i32 [[VAL]], i32 addrspace(1)* undef, align 4 42; AKF_HSA-NEXT: ret void 43; 44; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_y 45; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 46; ATTRIBUTOR_HSA-NEXT: ret void 47; 48 %val = call i32 @llvm.amdgcn.workitem.id.y() 49 store volatile i32 %val, i32 addrspace(1)* undef 50 ret void 51} 52 53define void @use_workitem_id_z() #1 { 54; AKF_HSA-LABEL: define {{[^@]+}}@use_workitem_id_z 55; AKF_HSA-SAME: () #[[ATTR3:[0-9]+]] { 56; AKF_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.z() 57; AKF_HSA-NEXT: store volatile i32 [[VAL]], i32 addrspace(1)* undef, align 4 58; AKF_HSA-NEXT: ret void 59; 60; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_z 61; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 62; ATTRIBUTOR_HSA-NEXT: ret void 63; 64 %val = call i32 @llvm.amdgcn.workitem.id.z() 65 store volatile i32 %val, i32 addrspace(1)* undef 66 ret void 67} 68 69define void @use_workgroup_id_x() #1 { 70; AKF_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_x 71; AKF_HSA-SAME: () #[[ATTR4:[0-9]+]] { 72; AKF_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.x() 73; AKF_HSA-NEXT: store volatile i32 [[VAL]], i32 addrspace(1)* undef, align 4 74; AKF_HSA-NEXT: ret void 75; 76; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_x 77; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 78; ATTRIBUTOR_HSA-NEXT: ret void 79; 80 %val = call i32 @llvm.amdgcn.workgroup.id.x() 81 store volatile i32 %val, i32 addrspace(1)* undef 82 ret void 83} 84 85define void @use_workgroup_id_y() #1 { 86; AKF_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y 87; AKF_HSA-SAME: () #[[ATTR5:[0-9]+]] { 88; AKF_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.y() 89; AKF_HSA-NEXT: store volatile i32 [[VAL]], i32 addrspace(1)* undef, align 4 90; AKF_HSA-NEXT: ret void 91; 92; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y 93; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 94; ATTRIBUTOR_HSA-NEXT: ret void 95; 96 %val = call i32 @llvm.amdgcn.workgroup.id.y() 97 store volatile i32 %val, i32 addrspace(1)* undef 98 ret void 99} 100 101define void @use_workgroup_id_z() #1 { 102; AKF_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_z 103; AKF_HSA-SAME: () #[[ATTR6:[0-9]+]] { 104; AKF_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.z() 105; AKF_HSA-NEXT: store volatile i32 [[VAL]], i32 addrspace(1)* undef, align 4 106; AKF_HSA-NEXT: ret void 107; 108; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_z 109; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 110; ATTRIBUTOR_HSA-NEXT: ret void 111; 112 %val = call i32 @llvm.amdgcn.workgroup.id.z() 113 store volatile i32 %val, i32 addrspace(1)* undef 114 ret void 115} 116 117define void @use_dispatch_ptr() #1 { 118; AKF_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr 119; AKF_HSA-SAME: () #[[ATTR7:[0-9]+]] { 120; AKF_HSA-NEXT: [[DISPATCH_PTR:%.*]] = call i8 addrspace(4)* @llvm.amdgcn.dispatch.ptr() 121; AKF_HSA-NEXT: store volatile i8 addrspace(4)* [[DISPATCH_PTR]], i8 addrspace(4)* addrspace(1)* undef, align 8 122; AKF_HSA-NEXT: ret void 123; 124; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr 125; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 126; ATTRIBUTOR_HSA-NEXT: ret void 127; 128 %dispatch.ptr = call i8 addrspace(4)* @llvm.amdgcn.dispatch.ptr() 129 store volatile i8 addrspace(4)* %dispatch.ptr, i8 addrspace(4)* addrspace(1)* undef 130 ret void 131} 132 133define void @use_queue_ptr() #1 { 134; AKF_HSA-LABEL: define {{[^@]+}}@use_queue_ptr 135; AKF_HSA-SAME: () #[[ATTR8:[0-9]+]] { 136; AKF_HSA-NEXT: [[QUEUE_PTR:%.*]] = call i8 addrspace(4)* @llvm.amdgcn.queue.ptr() 137; AKF_HSA-NEXT: store volatile i8 addrspace(4)* [[QUEUE_PTR]], i8 addrspace(4)* addrspace(1)* undef, align 8 138; AKF_HSA-NEXT: ret void 139; 140; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_queue_ptr 141; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 142; ATTRIBUTOR_HSA-NEXT: ret void 143; 144 %queue.ptr = call i8 addrspace(4)* @llvm.amdgcn.queue.ptr() 145 store volatile i8 addrspace(4)* %queue.ptr, i8 addrspace(4)* addrspace(1)* undef 146 ret void 147} 148 149define void @use_dispatch_id() #1 { 150; AKF_HSA-LABEL: define {{[^@]+}}@use_dispatch_id 151; AKF_HSA-SAME: () #[[ATTR9:[0-9]+]] { 152; AKF_HSA-NEXT: [[VAL:%.*]] = call i64 @llvm.amdgcn.dispatch.id() 153; AKF_HSA-NEXT: store volatile i64 [[VAL]], i64 addrspace(1)* undef, align 4 154; AKF_HSA-NEXT: ret void 155; 156; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_id 157; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 158; ATTRIBUTOR_HSA-NEXT: ret void 159; 160 %val = call i64 @llvm.amdgcn.dispatch.id() 161 store volatile i64 %val, i64 addrspace(1)* undef 162 ret void 163} 164 165define void @use_workgroup_id_y_workgroup_id_z() #1 { 166; AKF_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y_workgroup_id_z 167; AKF_HSA-SAME: () #[[ATTR10:[0-9]+]] { 168; AKF_HSA-NEXT: [[VAL0:%.*]] = call i32 @llvm.amdgcn.workgroup.id.y() 169; AKF_HSA-NEXT: [[VAL1:%.*]] = call i32 @llvm.amdgcn.workgroup.id.z() 170; AKF_HSA-NEXT: store volatile i32 [[VAL0]], i32 addrspace(1)* undef, align 4 171; AKF_HSA-NEXT: store volatile i32 [[VAL1]], i32 addrspace(1)* undef, align 4 172; AKF_HSA-NEXT: ret void 173; 174; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y_workgroup_id_z 175; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 176; ATTRIBUTOR_HSA-NEXT: ret void 177; 178 %val0 = call i32 @llvm.amdgcn.workgroup.id.y() 179 %val1 = call i32 @llvm.amdgcn.workgroup.id.z() 180 store volatile i32 %val0, i32 addrspace(1)* undef 181 store volatile i32 %val1, i32 addrspace(1)* undef 182 ret void 183} 184 185define void @func_indirect_use_workitem_id_x() #1 { 186; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_x 187; AKF_HSA-SAME: () #[[ATTR1]] { 188; AKF_HSA-NEXT: call void @use_workitem_id_x() 189; AKF_HSA-NEXT: ret void 190; 191; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_x 192; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 193; ATTRIBUTOR_HSA-NEXT: call void @use_workitem_id_x() #[[ATTR10:[0-9]+]] 194; ATTRIBUTOR_HSA-NEXT: ret void 195; 196 call void @use_workitem_id_x() 197 ret void 198} 199 200define void @kernel_indirect_use_workitem_id_x() #1 { 201; AKF_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workitem_id_x 202; AKF_HSA-SAME: () #[[ATTR1]] { 203; AKF_HSA-NEXT: call void @use_workitem_id_x() 204; AKF_HSA-NEXT: ret void 205; 206; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workitem_id_x 207; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 208; ATTRIBUTOR_HSA-NEXT: call void @use_workitem_id_x() #[[ATTR10]] 209; ATTRIBUTOR_HSA-NEXT: ret void 210; 211 call void @use_workitem_id_x() 212 ret void 213} 214 215define void @func_indirect_use_workitem_id_y() #1 { 216; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_y 217; AKF_HSA-SAME: () #[[ATTR2]] { 218; AKF_HSA-NEXT: call void @use_workitem_id_y() 219; AKF_HSA-NEXT: ret void 220; 221; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_y 222; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 223; ATTRIBUTOR_HSA-NEXT: call void @use_workitem_id_y() #[[ATTR10]] 224; ATTRIBUTOR_HSA-NEXT: ret void 225; 226 call void @use_workitem_id_y() 227 ret void 228} 229 230define void @func_indirect_use_workitem_id_z() #1 { 231; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_z 232; AKF_HSA-SAME: () #[[ATTR3]] { 233; AKF_HSA-NEXT: call void @use_workitem_id_z() 234; AKF_HSA-NEXT: ret void 235; 236; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_z 237; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 238; ATTRIBUTOR_HSA-NEXT: call void @use_workitem_id_z() #[[ATTR10]] 239; ATTRIBUTOR_HSA-NEXT: ret void 240; 241 call void @use_workitem_id_z() 242 ret void 243} 244 245define void @func_indirect_use_workgroup_id_x() #1 { 246; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_x 247; AKF_HSA-SAME: () #[[ATTR4]] { 248; AKF_HSA-NEXT: call void @use_workgroup_id_x() 249; AKF_HSA-NEXT: ret void 250; 251; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_x 252; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 253; ATTRIBUTOR_HSA-NEXT: call void @use_workgroup_id_x() #[[ATTR10]] 254; ATTRIBUTOR_HSA-NEXT: ret void 255; 256 call void @use_workgroup_id_x() 257 ret void 258} 259 260define void @kernel_indirect_use_workgroup_id_x() #1 { 261; AKF_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workgroup_id_x 262; AKF_HSA-SAME: () #[[ATTR4]] { 263; AKF_HSA-NEXT: call void @use_workgroup_id_x() 264; AKF_HSA-NEXT: ret void 265; 266; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workgroup_id_x 267; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 268; ATTRIBUTOR_HSA-NEXT: call void @use_workgroup_id_x() #[[ATTR10]] 269; ATTRIBUTOR_HSA-NEXT: ret void 270; 271 call void @use_workgroup_id_x() 272 ret void 273} 274 275define void @func_indirect_use_workgroup_id_y() #1 { 276; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y 277; AKF_HSA-SAME: () #[[ATTR5]] { 278; AKF_HSA-NEXT: call void @use_workgroup_id_y() 279; AKF_HSA-NEXT: ret void 280; 281; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y 282; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 283; ATTRIBUTOR_HSA-NEXT: call void @use_workgroup_id_y() #[[ATTR10]] 284; ATTRIBUTOR_HSA-NEXT: ret void 285; 286 call void @use_workgroup_id_y() 287 ret void 288} 289 290define void @func_indirect_use_workgroup_id_z() #1 { 291; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_z 292; AKF_HSA-SAME: () #[[ATTR6]] { 293; AKF_HSA-NEXT: call void @use_workgroup_id_z() 294; AKF_HSA-NEXT: ret void 295; 296; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_z 297; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 298; ATTRIBUTOR_HSA-NEXT: call void @use_workgroup_id_z() #[[ATTR10]] 299; ATTRIBUTOR_HSA-NEXT: ret void 300; 301 call void @use_workgroup_id_z() 302 ret void 303} 304 305define void @func_indirect_indirect_use_workgroup_id_y() #1 { 306; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_indirect_use_workgroup_id_y 307; AKF_HSA-SAME: () #[[ATTR5]] { 308; AKF_HSA-NEXT: call void @func_indirect_use_workgroup_id_y() 309; AKF_HSA-NEXT: ret void 310; 311; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_indirect_use_workgroup_id_y 312; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 313; ATTRIBUTOR_HSA-NEXT: call void @func_indirect_use_workgroup_id_y() #[[ATTR10]] 314; ATTRIBUTOR_HSA-NEXT: ret void 315; 316 call void @func_indirect_use_workgroup_id_y() 317 ret void 318} 319 320define void @indirect_x2_use_workgroup_id_y() #1 { 321; AKF_HSA-LABEL: define {{[^@]+}}@indirect_x2_use_workgroup_id_y 322; AKF_HSA-SAME: () #[[ATTR5]] { 323; AKF_HSA-NEXT: call void @func_indirect_indirect_use_workgroup_id_y() 324; AKF_HSA-NEXT: ret void 325; 326; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_x2_use_workgroup_id_y 327; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 328; ATTRIBUTOR_HSA-NEXT: call void @func_indirect_indirect_use_workgroup_id_y() #[[ATTR10]] 329; ATTRIBUTOR_HSA-NEXT: ret void 330; 331 call void @func_indirect_indirect_use_workgroup_id_y() 332 ret void 333} 334 335define void @func_indirect_use_dispatch_ptr() #1 { 336; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr 337; AKF_HSA-SAME: () #[[ATTR7]] { 338; AKF_HSA-NEXT: call void @use_dispatch_ptr() 339; AKF_HSA-NEXT: ret void 340; 341; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr 342; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 343; ATTRIBUTOR_HSA-NEXT: call void @use_dispatch_ptr() #[[ATTR10]] 344; ATTRIBUTOR_HSA-NEXT: ret void 345; 346 call void @use_dispatch_ptr() 347 ret void 348} 349 350define void @func_indirect_use_queue_ptr() #1 { 351; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_queue_ptr 352; AKF_HSA-SAME: () #[[ATTR8]] { 353; AKF_HSA-NEXT: call void @use_queue_ptr() 354; AKF_HSA-NEXT: ret void 355; 356; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_queue_ptr 357; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 358; ATTRIBUTOR_HSA-NEXT: call void @use_queue_ptr() #[[ATTR10]] 359; ATTRIBUTOR_HSA-NEXT: ret void 360; 361 call void @use_queue_ptr() 362 ret void 363} 364 365define void @func_indirect_use_dispatch_id() #1 { 366; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_id 367; AKF_HSA-SAME: () #[[ATTR9]] { 368; AKF_HSA-NEXT: call void @use_dispatch_id() 369; AKF_HSA-NEXT: ret void 370; 371; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_id 372; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 373; ATTRIBUTOR_HSA-NEXT: call void @use_dispatch_id() #[[ATTR10]] 374; ATTRIBUTOR_HSA-NEXT: ret void 375; 376 call void @use_dispatch_id() 377 ret void 378} 379 380define void @func_indirect_use_workgroup_id_y_workgroup_id_z() #1 { 381; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y_workgroup_id_z 382; AKF_HSA-SAME: () #[[ATTR11:[0-9]+]] { 383; AKF_HSA-NEXT: call void @func_indirect_use_workgroup_id_y_workgroup_id_z() 384; AKF_HSA-NEXT: ret void 385; 386; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y_workgroup_id_z 387; ATTRIBUTOR_HSA-SAME: () #[[ATTR2:[0-9]+]] { 388; ATTRIBUTOR_HSA-NEXT: unreachable 389; 390 call void @func_indirect_use_workgroup_id_y_workgroup_id_z() 391 ret void 392} 393 394define void @recursive_use_workitem_id_y() #1 { 395; AKF_HSA-LABEL: define {{[^@]+}}@recursive_use_workitem_id_y 396; AKF_HSA-SAME: () #[[ATTR2]] { 397; AKF_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.y() 398; AKF_HSA-NEXT: store volatile i32 [[VAL]], i32 addrspace(1)* undef, align 4 399; AKF_HSA-NEXT: call void @recursive_use_workitem_id_y() 400; AKF_HSA-NEXT: ret void 401; 402; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@recursive_use_workitem_id_y 403; ATTRIBUTOR_HSA-SAME: () #[[ATTR3:[0-9]+]] { 404; ATTRIBUTOR_HSA-NEXT: call void @recursive_use_workitem_id_y() #[[ATTR11:[0-9]+]] 405; ATTRIBUTOR_HSA-NEXT: unreachable 406; 407 %val = call i32 @llvm.amdgcn.workitem.id.y() 408 store volatile i32 %val, i32 addrspace(1)* undef 409 call void @recursive_use_workitem_id_y() 410 ret void 411} 412 413define void @call_recursive_use_workitem_id_y() #1 { 414; AKF_HSA-LABEL: define {{[^@]+}}@call_recursive_use_workitem_id_y 415; AKF_HSA-SAME: () #[[ATTR2]] { 416; AKF_HSA-NEXT: call void @recursive_use_workitem_id_y() 417; AKF_HSA-NEXT: ret void 418; 419; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@call_recursive_use_workitem_id_y 420; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 421; ATTRIBUTOR_HSA-NEXT: call void @recursive_use_workitem_id_y() #[[ATTR11]] 422; ATTRIBUTOR_HSA-NEXT: unreachable 423; 424 call void @recursive_use_workitem_id_y() 425 ret void 426} 427 428define void @use_group_to_flat_addrspacecast(i32 addrspace(3)* %ptr) #1 { 429; AKF_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast 430; AKF_HSA-SAME: (i32 addrspace(3)* [[PTR:%.*]]) #[[ATTR8]] { 431; AKF_HSA-NEXT: [[STOF:%.*]] = addrspacecast i32 addrspace(3)* [[PTR]] to i32 addrspace(4)* 432; AKF_HSA-NEXT: store volatile i32 0, i32 addrspace(4)* [[STOF]], align 4 433; AKF_HSA-NEXT: ret void 434; 435; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast 436; ATTRIBUTOR_HSA-SAME: (i32 addrspace(3)* [[PTR:%.*]]) #[[ATTR4:[0-9]+]] { 437; ATTRIBUTOR_HSA-NEXT: [[STOF:%.*]] = addrspacecast i32 addrspace(3)* [[PTR]] to i32 addrspace(4)* 438; ATTRIBUTOR_HSA-NEXT: store volatile i32 0, i32 addrspace(4)* [[STOF]], align 4 439; ATTRIBUTOR_HSA-NEXT: ret void 440; 441 %stof = addrspacecast i32 addrspace(3)* %ptr to i32 addrspace(4)* 442 store volatile i32 0, i32 addrspace(4)* %stof 443 ret void 444} 445 446 447define void @use_group_to_flat_addrspacecast_gfx9(i32 addrspace(3)* %ptr) #2 { 448; AKF_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_gfx9 449; AKF_HSA-SAME: (i32 addrspace(3)* [[PTR:%.*]]) #[[ATTR12:[0-9]+]] { 450; AKF_HSA-NEXT: [[STOF:%.*]] = addrspacecast i32 addrspace(3)* [[PTR]] to i32 addrspace(4)* 451; AKF_HSA-NEXT: store volatile i32 0, i32 addrspace(4)* [[STOF]], align 4 452; AKF_HSA-NEXT: ret void 453; 454; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_gfx9 455; ATTRIBUTOR_HSA-SAME: (i32 addrspace(3)* [[PTR:%.*]]) #[[ATTR5:[0-9]+]] { 456; ATTRIBUTOR_HSA-NEXT: [[STOF:%.*]] = addrspacecast i32 addrspace(3)* [[PTR]] to i32 addrspace(4)* 457; ATTRIBUTOR_HSA-NEXT: store volatile i32 0, i32 addrspace(4)* [[STOF]], align 4 458; ATTRIBUTOR_HSA-NEXT: ret void 459; 460 %stof = addrspacecast i32 addrspace(3)* %ptr to i32 addrspace(4)* 461 store volatile i32 0, i32 addrspace(4)* %stof 462 ret void 463} 464 465define void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(i32 addrspace(3)* %ptr) #2 { 466; AKF_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_queue_ptr_gfx9 467; AKF_HSA-SAME: (i32 addrspace(3)* [[PTR:%.*]]) #[[ATTR13:[0-9]+]] { 468; AKF_HSA-NEXT: [[STOF:%.*]] = addrspacecast i32 addrspace(3)* [[PTR]] to i32 addrspace(4)* 469; AKF_HSA-NEXT: store volatile i32 0, i32 addrspace(4)* [[STOF]], align 4 470; AKF_HSA-NEXT: call void @func_indirect_use_queue_ptr() 471; AKF_HSA-NEXT: ret void 472; 473; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_queue_ptr_gfx9 474; ATTRIBUTOR_HSA-SAME: (i32 addrspace(3)* [[PTR:%.*]]) #[[ATTR5]] { 475; ATTRIBUTOR_HSA-NEXT: [[STOF:%.*]] = addrspacecast i32 addrspace(3)* [[PTR]] to i32 addrspace(4)* 476; ATTRIBUTOR_HSA-NEXT: store volatile i32 0, i32 addrspace(4)* [[STOF]], align 4 477; ATTRIBUTOR_HSA-NEXT: call void @func_indirect_use_queue_ptr() #[[ATTR10]] 478; ATTRIBUTOR_HSA-NEXT: ret void 479; 480 %stof = addrspacecast i32 addrspace(3)* %ptr to i32 addrspace(4)* 481 store volatile i32 0, i32 addrspace(4)* %stof 482 call void @func_indirect_use_queue_ptr() 483 ret void 484} 485 486define void @indirect_use_group_to_flat_addrspacecast() #1 { 487; AKF_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast 488; AKF_HSA-SAME: () #[[ATTR8]] { 489; AKF_HSA-NEXT: call void @use_group_to_flat_addrspacecast(i32 addrspace(3)* null) 490; AKF_HSA-NEXT: ret void 491; 492; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast 493; ATTRIBUTOR_HSA-SAME: () #[[ATTR4]] { 494; ATTRIBUTOR_HSA-NEXT: call void @use_group_to_flat_addrspacecast(i32 addrspace(3)* null) #[[ATTR10]] 495; ATTRIBUTOR_HSA-NEXT: ret void 496; 497 call void @use_group_to_flat_addrspacecast(i32 addrspace(3)* null) 498 ret void 499} 500 501define void @indirect_use_group_to_flat_addrspacecast_gfx9() #1 { 502; AKF_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_gfx9 503; AKF_HSA-SAME: () #[[ATTR11]] { 504; AKF_HSA-NEXT: call void @use_group_to_flat_addrspacecast_gfx9(i32 addrspace(3)* null) 505; AKF_HSA-NEXT: ret void 506; 507; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_gfx9 508; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 509; ATTRIBUTOR_HSA-NEXT: call void @use_group_to_flat_addrspacecast_gfx9(i32 addrspace(3)* null) #[[ATTR10]] 510; ATTRIBUTOR_HSA-NEXT: ret void 511; 512 call void @use_group_to_flat_addrspacecast_gfx9(i32 addrspace(3)* null) 513 ret void 514} 515 516define void @indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9() #1 { 517; AKF_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9 518; AKF_HSA-SAME: () #[[ATTR8]] { 519; AKF_HSA-NEXT: call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(i32 addrspace(3)* null) 520; AKF_HSA-NEXT: ret void 521; 522; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9 523; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 524; ATTRIBUTOR_HSA-NEXT: call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(i32 addrspace(3)* null) #[[ATTR10]] 525; ATTRIBUTOR_HSA-NEXT: ret void 526; 527 call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(i32 addrspace(3)* null) 528 ret void 529} 530 531define void @use_kernarg_segment_ptr() #1 { 532; AKF_HSA-LABEL: define {{[^@]+}}@use_kernarg_segment_ptr 533; AKF_HSA-SAME: () #[[ATTR14:[0-9]+]] { 534; AKF_HSA-NEXT: [[KERNARG_SEGMENT_PTR:%.*]] = call i8 addrspace(4)* @llvm.amdgcn.kernarg.segment.ptr() 535; AKF_HSA-NEXT: store volatile i8 addrspace(4)* [[KERNARG_SEGMENT_PTR]], i8 addrspace(4)* addrspace(1)* undef, align 8 536; AKF_HSA-NEXT: ret void 537; 538; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_kernarg_segment_ptr 539; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 540; ATTRIBUTOR_HSA-NEXT: ret void 541; 542 %kernarg.segment.ptr = call i8 addrspace(4)* @llvm.amdgcn.kernarg.segment.ptr() 543 store volatile i8 addrspace(4)* %kernarg.segment.ptr, i8 addrspace(4)* addrspace(1)* undef 544 ret void 545} 546define void @func_indirect_use_kernarg_segment_ptr() #1 { 547; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_kernarg_segment_ptr 548; AKF_HSA-SAME: () #[[ATTR11]] { 549; AKF_HSA-NEXT: call void @use_kernarg_segment_ptr() 550; AKF_HSA-NEXT: ret void 551; 552; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_kernarg_segment_ptr 553; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 554; ATTRIBUTOR_HSA-NEXT: call void @use_kernarg_segment_ptr() #[[ATTR10]] 555; ATTRIBUTOR_HSA-NEXT: ret void 556; 557 call void @use_kernarg_segment_ptr() 558 ret void 559} 560 561define amdgpu_kernel void @kern_use_implicitarg_ptr() #1 { 562; AKF_HSA-LABEL: define {{[^@]+}}@kern_use_implicitarg_ptr 563; AKF_HSA-SAME: () #[[ATTR15:[0-9]+]] { 564; AKF_HSA-NEXT: [[IMPLICITARG_PTR:%.*]] = call i8 addrspace(4)* @llvm.amdgcn.implicitarg.ptr() 565; AKF_HSA-NEXT: store volatile i8 addrspace(4)* [[IMPLICITARG_PTR]], i8 addrspace(4)* addrspace(1)* undef, align 8 566; AKF_HSA-NEXT: ret void 567; 568; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_use_implicitarg_ptr 569; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 570; ATTRIBUTOR_HSA-NEXT: ret void 571; 572 %implicitarg.ptr = call i8 addrspace(4)* @llvm.amdgcn.implicitarg.ptr() 573 store volatile i8 addrspace(4)* %implicitarg.ptr, i8 addrspace(4)* addrspace(1)* undef 574 ret void 575} 576 577define void @use_implicitarg_ptr() #1 { 578; AKF_HSA-LABEL: define {{[^@]+}}@use_implicitarg_ptr 579; AKF_HSA-SAME: () #[[ATTR16:[0-9]+]] { 580; AKF_HSA-NEXT: [[IMPLICITARG_PTR:%.*]] = call i8 addrspace(4)* @llvm.amdgcn.implicitarg.ptr() 581; AKF_HSA-NEXT: store volatile i8 addrspace(4)* [[IMPLICITARG_PTR]], i8 addrspace(4)* addrspace(1)* undef, align 8 582; AKF_HSA-NEXT: ret void 583; 584; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_implicitarg_ptr 585; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 586; ATTRIBUTOR_HSA-NEXT: ret void 587; 588 %implicitarg.ptr = call i8 addrspace(4)* @llvm.amdgcn.implicitarg.ptr() 589 store volatile i8 addrspace(4)* %implicitarg.ptr, i8 addrspace(4)* addrspace(1)* undef 590 ret void 591} 592 593define void @func_indirect_use_implicitarg_ptr() #1 { 594; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_implicitarg_ptr 595; AKF_HSA-SAME: () #[[ATTR16]] { 596; AKF_HSA-NEXT: call void @use_implicitarg_ptr() 597; AKF_HSA-NEXT: ret void 598; 599; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_implicitarg_ptr 600; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] { 601; ATTRIBUTOR_HSA-NEXT: call void @use_implicitarg_ptr() #[[ATTR10]] 602; ATTRIBUTOR_HSA-NEXT: ret void 603; 604 call void @use_implicitarg_ptr() 605 ret void 606} 607 608declare void @external.func() #3 609 610; This function gets deleted. 611define internal void @defined.func() #3 { 612; AKF_HSA-LABEL: define {{[^@]+}}@defined.func 613; AKF_HSA-SAME: () #[[ATTR17:[0-9]+]] { 614; AKF_HSA-NEXT: ret void 615; 616 ret void 617} 618 619define void @func_call_external() #3 { 620; AKF_HSA-LABEL: define {{[^@]+}}@func_call_external 621; AKF_HSA-SAME: () #[[ATTR17]] { 622; AKF_HSA-NEXT: call void @external.func() 623; AKF_HSA-NEXT: ret void 624; 625; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_external 626; ATTRIBUTOR_HSA-SAME: () #[[ATTR6:[0-9]+]] { 627; ATTRIBUTOR_HSA-NEXT: call void @external.func() #[[ATTR10]] 628; ATTRIBUTOR_HSA-NEXT: ret void 629; 630 call void @external.func() 631 ret void 632} 633 634define void @func_call_defined() #3 { 635; AKF_HSA-LABEL: define {{[^@]+}}@func_call_defined 636; AKF_HSA-SAME: () #[[ATTR17]] { 637; AKF_HSA-NEXT: call void @defined.func() 638; AKF_HSA-NEXT: ret void 639; 640; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_defined 641; ATTRIBUTOR_HSA-SAME: () #[[ATTR7:[0-9]+]] { 642; ATTRIBUTOR_HSA-NEXT: ret void 643; 644 call void @defined.func() 645 ret void 646} 647define void @func_call_asm() #3 { 648; AKF_HSA-LABEL: define {{[^@]+}}@func_call_asm 649; AKF_HSA-SAME: () #[[ATTR18:[0-9]+]] { 650; AKF_HSA-NEXT: call void asm sideeffect "", ""() #[[ATTR18]] 651; AKF_HSA-NEXT: ret void 652; 653; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_asm 654; ATTRIBUTOR_HSA-SAME: () #[[ATTR7]] { 655; ATTRIBUTOR_HSA-NEXT: call void asm sideeffect "", ""() #[[ATTR10]] 656; ATTRIBUTOR_HSA-NEXT: ret void 657; 658 call void asm sideeffect "", ""() #3 659 ret void 660} 661 662define amdgpu_kernel void @kern_call_external() #3 { 663; AKF_HSA-LABEL: define {{[^@]+}}@kern_call_external 664; AKF_HSA-SAME: () #[[ATTR19:[0-9]+]] { 665; AKF_HSA-NEXT: call void @external.func() 666; AKF_HSA-NEXT: ret void 667; 668; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_call_external 669; ATTRIBUTOR_HSA-SAME: () #[[ATTR8:[0-9]+]] { 670; ATTRIBUTOR_HSA-NEXT: call void @external.func() #[[ATTR10]] 671; ATTRIBUTOR_HSA-NEXT: ret void 672; 673 call void @external.func() 674 ret void 675} 676 677define amdgpu_kernel void @func_kern_defined() #3 { 678; AKF_HSA-LABEL: define {{[^@]+}}@func_kern_defined 679; AKF_HSA-SAME: () #[[ATTR19]] { 680; AKF_HSA-NEXT: call void @defined.func() 681; AKF_HSA-NEXT: ret void 682; 683; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_kern_defined 684; ATTRIBUTOR_HSA-SAME: () #[[ATTR7]] { 685; ATTRIBUTOR_HSA-NEXT: ret void 686; 687 call void @defined.func() 688 ret void 689} 690 691define i32 @use_dispatch_ptr_ret_type() #1 { 692; AKF_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr_ret_type 693; AKF_HSA-SAME: () #[[ATTR20:[0-9]+]] { 694; AKF_HSA-NEXT: [[DISPATCH_PTR:%.*]] = call i8 addrspace(4)* @llvm.amdgcn.dispatch.ptr() 695; AKF_HSA-NEXT: store volatile i8 addrspace(4)* [[DISPATCH_PTR]], i8 addrspace(4)* addrspace(1)* undef, align 8 696; AKF_HSA-NEXT: ret i32 0 697; 698; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr_ret_type 699; ATTRIBUTOR_HSA-SAME: () #[[ATTR9:[0-9]+]] { 700; ATTRIBUTOR_HSA-NEXT: ret i32 0 701; 702 %dispatch.ptr = call i8 addrspace(4)* @llvm.amdgcn.dispatch.ptr() 703 store volatile i8 addrspace(4)* %dispatch.ptr, i8 addrspace(4)* addrspace(1)* undef 704 ret i32 0 705} 706 707define float @func_indirect_use_dispatch_ptr_constexpr_cast_func() #1 { 708; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr_constexpr_cast_func 709; AKF_HSA-SAME: () #[[ATTR20]] { 710; AKF_HSA-NEXT: [[F:%.*]] = call float bitcast (i32 ()* @use_dispatch_ptr_ret_type to float ()*)() 711; AKF_HSA-NEXT: [[FADD:%.*]] = fadd float [[F]], 1.000000e+00 712; AKF_HSA-NEXT: ret float [[FADD]] 713; 714; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr_constexpr_cast_func 715; ATTRIBUTOR_HSA-SAME: () #[[ATTR9]] { 716; ATTRIBUTOR_HSA-NEXT: [[F:%.*]] = call float bitcast (i32 ()* @use_dispatch_ptr_ret_type to float ()*)() 717; ATTRIBUTOR_HSA-NEXT: [[FADD:%.*]] = fadd float [[F]], 1.000000e+00 718; ATTRIBUTOR_HSA-NEXT: ret float [[FADD]] 719; 720 %f = call float bitcast (i32()* @use_dispatch_ptr_ret_type to float()*)() 721 %fadd = fadd float %f, 1.0 722 ret float %fadd 723} 724 725attributes #0 = { nounwind readnone speculatable } 726attributes #1 = { nounwind "target-cpu"="fiji" } 727attributes #2 = { nounwind "target-cpu"="gfx900" } 728attributes #3 = { nounwind } 729 730;. 731; AKF_HSA: attributes #[[ATTR0:[0-9]+]] = { nounwind readnone speculatable willreturn } 732; AKF_HSA: attributes #[[ATTR1]] = { nounwind "amdgpu-work-item-id-x" "target-cpu"="fiji" "uniform-work-group-size"="false" } 733; AKF_HSA: attributes #[[ATTR2]] = { nounwind "amdgpu-work-item-id-y" "target-cpu"="fiji" "uniform-work-group-size"="false" } 734; AKF_HSA: attributes #[[ATTR3]] = { nounwind "amdgpu-work-item-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" } 735; AKF_HSA: attributes #[[ATTR4]] = { nounwind "amdgpu-work-group-id-x" "target-cpu"="fiji" "uniform-work-group-size"="false" } 736; AKF_HSA: attributes #[[ATTR5]] = { nounwind "amdgpu-work-group-id-y" "target-cpu"="fiji" "uniform-work-group-size"="false" } 737; AKF_HSA: attributes #[[ATTR6]] = { nounwind "amdgpu-work-group-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" } 738; AKF_HSA: attributes #[[ATTR7]] = { nounwind "amdgpu-dispatch-ptr" "target-cpu"="fiji" "uniform-work-group-size"="false" } 739; AKF_HSA: attributes #[[ATTR8]] = { nounwind "amdgpu-queue-ptr" "target-cpu"="fiji" "uniform-work-group-size"="false" } 740; AKF_HSA: attributes #[[ATTR9]] = { nounwind "amdgpu-dispatch-id" "target-cpu"="fiji" "uniform-work-group-size"="false" } 741; AKF_HSA: attributes #[[ATTR10]] = { nounwind "amdgpu-work-group-id-y" "amdgpu-work-group-id-z" "target-cpu"="fiji" } 742; AKF_HSA: attributes #[[ATTR11]] = { nounwind "target-cpu"="fiji" "uniform-work-group-size"="false" } 743; AKF_HSA: attributes #[[ATTR12]] = { nounwind "target-cpu"="gfx900" "uniform-work-group-size"="false" } 744; AKF_HSA: attributes #[[ATTR13]] = { nounwind "amdgpu-queue-ptr" "target-cpu"="gfx900" "uniform-work-group-size"="false" } 745; AKF_HSA: attributes #[[ATTR14]] = { nounwind "amdgpu-kernarg-segment-ptr" "target-cpu"="fiji" "uniform-work-group-size"="false" } 746; AKF_HSA: attributes #[[ATTR15]] = { nounwind "amdgpu-implicitarg-ptr" "target-cpu"="fiji" } 747; AKF_HSA: attributes #[[ATTR16]] = { nounwind "amdgpu-implicitarg-ptr" "target-cpu"="fiji" "uniform-work-group-size"="false" } 748; AKF_HSA: attributes #[[ATTR17]] = { nounwind "uniform-work-group-size"="false" } 749; AKF_HSA: attributes #[[ATTR18]] = { nounwind } 750; AKF_HSA: attributes #[[ATTR19]] = { nounwind "amdgpu-calls" "uniform-work-group-size"="false" } 751; AKF_HSA: attributes #[[ATTR20]] = { nounwind "amdgpu-dispatch-id" "amdgpu-dispatch-ptr" "amdgpu-implicitarg-ptr" "amdgpu-queue-ptr" "amdgpu-work-group-id-x" "amdgpu-work-group-id-y" "amdgpu-work-group-id-z" "amdgpu-work-item-id-x" "amdgpu-work-item-id-y" "amdgpu-work-item-id-z" "target-cpu"="fiji" } 752;. 753; ATTRIBUTOR_HSA: attributes #[[ATTR0:[0-9]+]] = { nounwind readnone speculatable willreturn "uniform-work-group-size"="false" } 754; ATTRIBUTOR_HSA: attributes #[[ATTR1]] = { nounwind "target-cpu"="fiji" "uniform-work-group-size"="false" } 755; ATTRIBUTOR_HSA: attributes #[[ATTR2]] = { noreturn nounwind readnone "target-cpu"="fiji" "uniform-work-group-size"="false" } 756; ATTRIBUTOR_HSA: attributes #[[ATTR3]] = { noreturn nounwind "target-cpu"="fiji" "uniform-work-group-size"="false" } 757; ATTRIBUTOR_HSA: attributes #[[ATTR4]] = { nounwind "amdgpu-queue-ptr" "target-cpu"="fiji" "uniform-work-group-size"="false" } 758; ATTRIBUTOR_HSA: attributes #[[ATTR5]] = { nounwind "target-cpu"="gfx900" "uniform-work-group-size"="false" } 759; ATTRIBUTOR_HSA: attributes #[[ATTR6]] = { nounwind "amdgpu-dispatch-id" "amdgpu-dispatch-ptr" "amdgpu-implicitarg-ptr" "amdgpu-queue-ptr" "amdgpu-work-group-id-x" "amdgpu-work-group-id-y" "amdgpu-work-group-id-z" "amdgpu-work-item-id-x" "amdgpu-work-item-id-y" "amdgpu-work-item-id-z" "uniform-work-group-size"="false" } 760; ATTRIBUTOR_HSA: attributes #[[ATTR7]] = { nounwind "uniform-work-group-size"="false" } 761; ATTRIBUTOR_HSA: attributes #[[ATTR8]] = { nounwind "amdgpu-calls" "amdgpu-dispatch-id" "amdgpu-dispatch-ptr" "amdgpu-implicitarg-ptr" "amdgpu-queue-ptr" "amdgpu-work-group-id-x" "amdgpu-work-group-id-y" "amdgpu-work-group-id-z" "amdgpu-work-item-id-x" "amdgpu-work-item-id-y" "amdgpu-work-item-id-z" "uniform-work-group-size"="false" } 762; ATTRIBUTOR_HSA: attributes #[[ATTR9]] = { nounwind "amdgpu-dispatch-id" "amdgpu-dispatch-ptr" "amdgpu-implicitarg-ptr" "amdgpu-queue-ptr" "amdgpu-work-group-id-x" "amdgpu-work-group-id-y" "amdgpu-work-group-id-z" "amdgpu-work-item-id-x" "amdgpu-work-item-id-y" "amdgpu-work-item-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" } 763; ATTRIBUTOR_HSA: attributes #[[ATTR10]] = { nounwind } 764; ATTRIBUTOR_HSA: attributes #[[ATTR11]] = { noreturn nounwind } 765;. 766