97 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --scrub-attributes --version 22; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=instcombine < %s | FileCheck --check-prefixes=DEFAULT,CHECK %s3; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mattr=+wavefrontsize32 -passes=instcombine < %s | FileCheck --check-prefixes=WAVE32,CHECK %s4; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mattr=+wavefrontsize64 -passes=instcombine < %s | FileCheck --check-prefixes=WAVE64,CHECK %s5; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 -passes=instcombine < %s | FileCheck --check-prefixes=WAVE32,CHECK %s6; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 -mattr=+wavefrontsize64 -passes=instcombine < %s | FileCheck --check-prefixes=WAVE64,CHECK %s7 8declare i32 @llvm.amdgcn.mbcnt.lo(i32, i32)9declare i32 @llvm.amdgcn.mbcnt.hi(i32, i32)10 11define i32 @mbcnt_lo(i32 %x, i32 %y) {12; DEFAULT-LABEL: define i32 @mbcnt_lo13; DEFAULT-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {14; DEFAULT-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 [[X]], i32 [[Y]])15; DEFAULT-NEXT: ret i32 [[LO]]16;17; WAVE32-LABEL: define i32 @mbcnt_lo18; WAVE32-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) #[[ATTR1:[0-9]+]] {19; WAVE32-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 [[X]], i32 [[Y]])20; WAVE32-NEXT: ret i32 [[LO]]21;22; WAVE64-LABEL: define i32 @mbcnt_lo23; WAVE64-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) #[[ATTR1:[0-9]+]] {24; WAVE64-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 [[X]], i32 [[Y]])25; WAVE64-NEXT: ret i32 [[LO]]26;27 %lo = call i32 @llvm.amdgcn.mbcnt.lo(i32 %x, i32 %y)28 ret i32 %lo29}30 31define i32 @mbcnt_hi(i32 %x, i32 %y) {32; DEFAULT-LABEL: define i32 @mbcnt_hi33; DEFAULT-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) {34; DEFAULT-NEXT: [[HI:%.*]] = call i32 @llvm.amdgcn.mbcnt.hi(i32 [[X]], i32 [[Y]])35; DEFAULT-NEXT: ret i32 [[HI]]36;37; WAVE32-LABEL: define i32 @mbcnt_hi38; WAVE32-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) #[[ATTR1]] {39; WAVE32-NEXT: ret i32 [[Y]]40;41; WAVE64-LABEL: define i32 @mbcnt_hi42; WAVE64-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) #[[ATTR1]] {43; WAVE64-NEXT: [[HI:%.*]] = call i32 @llvm.amdgcn.mbcnt.hi(i32 [[X]], i32 [[Y]])44; WAVE64-NEXT: ret i32 [[HI]]45;46 %hi = call i32 @llvm.amdgcn.mbcnt.hi(i32 %x, i32 %y)47 ret i32 %hi48}49 50define i32 @mbcnt_lo_hi(i32 %x, i32 %y, i32 %z) {51; DEFAULT-LABEL: define i32 @mbcnt_lo_hi52; DEFAULT-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]], i32 [[Z:%.*]]) {53; DEFAULT-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 [[X]], i32 [[Y]])54; DEFAULT-NEXT: [[HI:%.*]] = call i32 @llvm.amdgcn.mbcnt.hi(i32 [[Z]], i32 [[LO]])55; DEFAULT-NEXT: ret i32 [[HI]]56;57; WAVE32-LABEL: define i32 @mbcnt_lo_hi58; WAVE32-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]], i32 [[Z:%.*]]) #[[ATTR1]] {59; WAVE32-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 [[X]], i32 [[Y]])60; WAVE32-NEXT: ret i32 [[LO]]61;62; WAVE64-LABEL: define i32 @mbcnt_lo_hi63; WAVE64-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]], i32 [[Z:%.*]]) #[[ATTR1]] {64; WAVE64-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 [[X]], i32 [[Y]])65; WAVE64-NEXT: [[HI:%.*]] = call i32 @llvm.amdgcn.mbcnt.hi(i32 [[Z]], i32 [[LO]])66; WAVE64-NEXT: ret i32 [[HI]]67;68 %lo = call i32 @llvm.amdgcn.mbcnt.lo(i32 %x, i32 %y)69 %hi = call i32 @llvm.amdgcn.mbcnt.hi(i32 %z, i32 %lo)70 ret i32 %hi71}72 73define i32 @ockl_lane_u32() {74; DEFAULT-LABEL: define i32 @ockl_lane_u32() {75; DEFAULT-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 -1, i32 0)76; DEFAULT-NEXT: [[HI:%.*]] = call i32 @llvm.amdgcn.mbcnt.hi(i32 -1, i32 [[LO]])77; DEFAULT-NEXT: ret i32 [[HI]]78;79; WAVE32-LABEL: define i32 @ockl_lane_u3280; WAVE32-SAME: () #[[ATTR1]] {81; WAVE32-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 -1, i32 0)82; WAVE32-NEXT: ret i32 [[LO]]83;84; WAVE64-LABEL: define i32 @ockl_lane_u3285; WAVE64-SAME: () #[[ATTR1]] {86; WAVE64-NEXT: [[LO:%.*]] = call i32 @llvm.amdgcn.mbcnt.lo(i32 -1, i32 0)87; WAVE64-NEXT: [[HI:%.*]] = call i32 @llvm.amdgcn.mbcnt.hi(i32 -1, i32 [[LO]])88; WAVE64-NEXT: ret i32 [[HI]]89;90 %lo = call i32 @llvm.amdgcn.mbcnt.lo(i32 -1, i32 0)91 %hi = call i32 @llvm.amdgcn.mbcnt.hi(i32 -1, i32 %lo)92 ret i32 %hi93}94 95;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:96; CHECK: {{.*}}97