1*9880d681SAndroid Build Coastguard Worker; Test indirect jumps. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine i32 @f1(i32 %x, i32 %y, i32 %op) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 7*9880d681SAndroid Build Coastguard Worker; CHECK: ahi %r4, -1 8*9880d681SAndroid Build Coastguard Worker; CHECK: clibh %r4, 5, 0(%r14) 9*9880d681SAndroid Build Coastguard Worker; CHECK: llgfr [[OP64:%r[0-5]]], %r4 10*9880d681SAndroid Build Coastguard Worker; CHECK: sllg [[INDEX:%r[1-5]]], [[OP64]], 3 11*9880d681SAndroid Build Coastguard Worker; CHECK: larl [[BASE:%r[1-5]]] 12*9880d681SAndroid Build Coastguard Worker; CHECK: lg [[TARGET:%r[1-5]]], 0([[BASE]],[[INDEX]]) 13*9880d681SAndroid Build Coastguard Worker; CHECK: br [[TARGET]] 14*9880d681SAndroid Build Coastguard Workerentry: 15*9880d681SAndroid Build Coastguard Worker switch i32 %op, label %exit [ 16*9880d681SAndroid Build Coastguard Worker i32 1, label %b.add 17*9880d681SAndroid Build Coastguard Worker i32 2, label %b.sub 18*9880d681SAndroid Build Coastguard Worker i32 3, label %b.and 19*9880d681SAndroid Build Coastguard Worker i32 4, label %b.or 20*9880d681SAndroid Build Coastguard Worker i32 5, label %b.xor 21*9880d681SAndroid Build Coastguard Worker i32 6, label %b.mul 22*9880d681SAndroid Build Coastguard Worker ] 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerb.add: 25*9880d681SAndroid Build Coastguard Worker %add = add i32 %x, %y 26*9880d681SAndroid Build Coastguard Worker br label %exit 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerb.sub: 29*9880d681SAndroid Build Coastguard Worker %sub = sub i32 %x, %y 30*9880d681SAndroid Build Coastguard Worker br label %exit 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerb.and: 33*9880d681SAndroid Build Coastguard Worker %and = and i32 %x, %y 34*9880d681SAndroid Build Coastguard Worker br label %exit 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerb.or: 37*9880d681SAndroid Build Coastguard Worker %or = or i32 %x, %y 38*9880d681SAndroid Build Coastguard Worker br label %exit 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerb.xor: 41*9880d681SAndroid Build Coastguard Worker %xor = xor i32 %x, %y 42*9880d681SAndroid Build Coastguard Worker br label %exit 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerb.mul: 45*9880d681SAndroid Build Coastguard Worker %mul = mul i32 %x, %y 46*9880d681SAndroid Build Coastguard Worker br label %exit 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerexit: 49*9880d681SAndroid Build Coastguard Worker %res = phi i32 [ %x, %entry ], 50*9880d681SAndroid Build Coastguard Worker [ %add, %b.add ], 51*9880d681SAndroid Build Coastguard Worker [ %sub, %b.sub ], 52*9880d681SAndroid Build Coastguard Worker [ %and, %b.and ], 53*9880d681SAndroid Build Coastguard Worker [ %or, %b.or ], 54*9880d681SAndroid Build Coastguard Worker [ %xor, %b.xor ], 55*9880d681SAndroid Build Coastguard Worker [ %mul, %b.mul ] 56*9880d681SAndroid Build Coastguard Worker ret i32 %res 57*9880d681SAndroid Build Coastguard Worker} 58