115 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -mtriple=amdgcn-- -passes=instcombine -S < %s | FileCheck -check-prefix=OPT %s3; RUN: opt -mtriple=amdgcn-- -mattr=+wavefrontsize32 -passes=instcombine -S < %s | FileCheck -check-prefix=OPT-W32 %s4; RUN: opt -mtriple=amdgcn-- -mattr=+wavefrontsize64 -passes=instcombine -S < %s | FileCheck -check-prefix=OPT-W64 %s5; RUN: opt -mtriple=amdgcn-- -mcpu=tonga -passes=instcombine -S < %s | FileCheck -check-prefix=OPT-W64 %s6; RUN: opt -mtriple=amdgcn-- -mcpu=gfx1010 -mattr=+wavefrontsize32 -passes=instcombine -S < %s | FileCheck -check-prefix=OPT-W32 %s7; RUN: opt -mtriple=amdgcn-- -mcpu=gfx1010 -mattr=+wavefrontsize64 -passes=instcombine -S < %s | FileCheck -check-prefix=OPT-W64 %s8; RUN: opt -mtriple=amdgcn-- -mcpu=gfx1100 -mattr=+wavefrontsize32 -passes=instcombine -S < %s | FileCheck -check-prefix=OPT-W32 %s9; RUN: opt -mtriple=amdgcn-- -mcpu=gfx1100 -mattr=+wavefrontsize64 -passes=instcombine -S < %s | FileCheck -check-prefix=OPT-W64 %s10 11define amdgpu_kernel void @fold_wavefrontsize(ptr addrspace(1) nocapture %arg) {12; OPT-LABEL: define amdgpu_kernel void @fold_wavefrontsize(13; OPT-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) {14; OPT-NEXT: [[BB:.*:]]15; OPT-NEXT: [[TMP:%.*]] = tail call i32 @llvm.amdgcn.wavefrontsize() #[[ATTR1:[0-9]+]]16; OPT-NEXT: store i32 [[TMP]], ptr addrspace(1) [[ARG]], align 417; OPT-NEXT: ret void18;19; OPT-W32-LABEL: define amdgpu_kernel void @fold_wavefrontsize(20; OPT-W32-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {21; OPT-W32-NEXT: [[BB:.*:]]22; OPT-W32-NEXT: store i32 32, ptr addrspace(1) [[ARG]], align 423; OPT-W32-NEXT: ret void24;25; OPT-W64-LABEL: define amdgpu_kernel void @fold_wavefrontsize(26; OPT-W64-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {27; OPT-W64-NEXT: [[BB:.*:]]28; OPT-W64-NEXT: store i32 64, ptr addrspace(1) [[ARG]], align 429; OPT-W64-NEXT: ret void30;31bb:32 %tmp = tail call i32 @llvm.amdgcn.wavefrontsize() #033 store i32 %tmp, ptr addrspace(1) %arg, align 434 ret void35}36 37define amdgpu_kernel void @fold_and_optimize_wavefrontsize(ptr addrspace(1) nocapture %arg) {38; OPT-LABEL: define amdgpu_kernel void @fold_and_optimize_wavefrontsize(39; OPT-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) {40; OPT-NEXT: [[BB:.*:]]41; OPT-NEXT: [[TMP:%.*]] = tail call i32 @llvm.amdgcn.wavefrontsize() #[[ATTR1]]42; OPT-NEXT: [[TMP1:%.*]] = icmp samesign ugt i32 [[TMP]], 3243; OPT-NEXT: [[TMP2:%.*]] = select i1 [[TMP1]], i32 2, i32 144; OPT-NEXT: store i32 [[TMP2]], ptr addrspace(1) [[ARG]], align 445; OPT-NEXT: ret void46;47; OPT-W32-LABEL: define amdgpu_kernel void @fold_and_optimize_wavefrontsize(48; OPT-W32-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) #[[ATTR0]] {49; OPT-W32-NEXT: [[BB:.*:]]50; OPT-W32-NEXT: store i32 1, ptr addrspace(1) [[ARG]], align 451; OPT-W32-NEXT: ret void52;53; OPT-W64-LABEL: define amdgpu_kernel void @fold_and_optimize_wavefrontsize(54; OPT-W64-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) #[[ATTR0]] {55; OPT-W64-NEXT: [[BB:.*:]]56; OPT-W64-NEXT: store i32 2, ptr addrspace(1) [[ARG]], align 457; OPT-W64-NEXT: ret void58;59bb:60 %tmp = tail call i32 @llvm.amdgcn.wavefrontsize() #061 %tmp1 = icmp ugt i32 %tmp, 3262 %tmp2 = select i1 %tmp1, i32 2, i32 163 store i32 %tmp2, ptr addrspace(1) %arg64 ret void65}66 67define amdgpu_kernel void @fold_and_optimize_if_wavefrontsize(ptr addrspace(1) nocapture %arg) {68; OPT-LABEL: define amdgpu_kernel void @fold_and_optimize_if_wavefrontsize(69; OPT-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) {70; OPT-NEXT: [[BB:.*:]]71; OPT-NEXT: [[TMP:%.*]] = tail call i32 @llvm.amdgcn.wavefrontsize() #[[ATTR1]]72; OPT-NEXT: [[TMP1:%.*]] = icmp samesign ugt i32 [[TMP]], 3273; OPT-NEXT: br i1 [[TMP1]], label %[[BB2:.*]], label %[[BB3:.*]]74; OPT: [[BB2]]:75; OPT-NEXT: store i32 1, ptr addrspace(1) [[ARG]], align 476; OPT-NEXT: br label %[[BB3]]77; OPT: [[BB3]]:78; OPT-NEXT: ret void79;80; OPT-W32-LABEL: define amdgpu_kernel void @fold_and_optimize_if_wavefrontsize(81; OPT-W32-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) #[[ATTR0]] {82; OPT-W32-NEXT: [[BB:.*:]]83; OPT-W32-NEXT: br i1 false, label %[[BB2:.*]], label %[[BB3:.*]]84; OPT-W32: [[BB2]]:85; OPT-W32-NEXT: br label %[[BB3]]86; OPT-W32: [[BB3]]:87; OPT-W32-NEXT: ret void88;89; OPT-W64-LABEL: define amdgpu_kernel void @fold_and_optimize_if_wavefrontsize(90; OPT-W64-SAME: ptr addrspace(1) captures(none) [[ARG:%.*]]) #[[ATTR0]] {91; OPT-W64-NEXT: [[BB:.*:]]92; OPT-W64-NEXT: br i1 true, label %[[BB2:.*]], label %[[BB3:.*]]93; OPT-W64: [[BB2]]:94; OPT-W64-NEXT: store i32 1, ptr addrspace(1) [[ARG]], align 495; OPT-W64-NEXT: br label %[[BB3]]96; OPT-W64: [[BB3]]:97; OPT-W64-NEXT: ret void98;99bb:100 %tmp = tail call i32 @llvm.amdgcn.wavefrontsize() #0101 %tmp1 = icmp ugt i32 %tmp, 32102 br i1 %tmp1, label %bb2, label %bb3103 104bb2: ; preds = %bb105 store i32 1, ptr addrspace(1) %arg, align 4106 br label %bb3107 108bb3: ; preds = %bb2, %bb109 ret void110}111 112declare i32 @llvm.amdgcn.wavefrontsize() #0113 114attributes #0 = { nounwind readnone speculatable }115