1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; CHECK: bfe0 5*9880d681SAndroid Build Coastguard Workerdefine i32 @bfe0(i32 %a) { 6*9880d681SAndroid Build Coastguard Worker; CHECK: bfe.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, 4, 4 7*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: shr 8*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and 9*9880d681SAndroid Build Coastguard Worker %val0 = ashr i32 %a, 4 10*9880d681SAndroid Build Coastguard Worker %val1 = and i32 %val0, 15 11*9880d681SAndroid Build Coastguard Worker ret i32 %val1 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; CHECK: bfe1 15*9880d681SAndroid Build Coastguard Workerdefine i32 @bfe1(i32 %a) { 16*9880d681SAndroid Build Coastguard Worker; CHECK: bfe.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, 3, 3 17*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: shr 18*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and 19*9880d681SAndroid Build Coastguard Worker %val0 = ashr i32 %a, 3 20*9880d681SAndroid Build Coastguard Worker %val1 = and i32 %val0, 7 21*9880d681SAndroid Build Coastguard Worker ret i32 %val1 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; CHECK: bfe2 25*9880d681SAndroid Build Coastguard Workerdefine i32 @bfe2(i32 %a) { 26*9880d681SAndroid Build Coastguard Worker; CHECK: bfe.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, 5, 3 27*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: shr 28*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and 29*9880d681SAndroid Build Coastguard Worker %val0 = ashr i32 %a, 5 30*9880d681SAndroid Build Coastguard Worker %val1 = and i32 %val0, 7 31*9880d681SAndroid Build Coastguard Worker ret i32 %val1 32*9880d681SAndroid Build Coastguard Worker} 33