1*9880d681SAndroid Build Coastguard Worker; Test that we take advantage of signext and zeroext annotations. 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 Worker; Zero extension of something that is already zero-extended. 6*9880d681SAndroid Build Coastguard Workerdefine void @f1(i32 zeroext %r2, i64 *%r3) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 8*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r2 9*9880d681SAndroid Build Coastguard Worker; CHECK: stg %r2, 0(%r3) 10*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 11*9880d681SAndroid Build Coastguard Worker %conv = zext i32 %r2 to i64 12*9880d681SAndroid Build Coastguard Worker store i64 %conv, i64* %r3 13*9880d681SAndroid Build Coastguard Worker ret void 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; Sign extension of something that is already sign-extended. 17*9880d681SAndroid Build Coastguard Workerdefine void @f2(i32 signext %r2, i64 *%r3) { 18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 19*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r2 20*9880d681SAndroid Build Coastguard Worker; CHECK: stg %r2, 0(%r3) 21*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 22*9880d681SAndroid Build Coastguard Worker %conv = sext i32 %r2 to i64 23*9880d681SAndroid Build Coastguard Worker store i64 %conv, i64* %r3 24*9880d681SAndroid Build Coastguard Worker ret void 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; Sign extension of something that is already zero-extended. 28*9880d681SAndroid Build Coastguard Workerdefine void @f3(i32 zeroext %r2, i64 *%r3) { 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 30*9880d681SAndroid Build Coastguard Worker; CHECK: lgfr [[REGISTER:%r[0-5]+]], %r2 31*9880d681SAndroid Build Coastguard Worker; CHECK: stg [[REGISTER]], 0(%r3) 32*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 33*9880d681SAndroid Build Coastguard Worker %conv = sext i32 %r2 to i64 34*9880d681SAndroid Build Coastguard Worker store i64 %conv, i64* %r3 35*9880d681SAndroid Build Coastguard Worker ret void 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; Zero extension of something that is already sign-extended. 39*9880d681SAndroid Build Coastguard Workerdefine void @f4(i32 signext %r2, i64 *%r3) { 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 41*9880d681SAndroid Build Coastguard Worker; CHECK: llgfr [[REGISTER:%r[0-5]+]], %r2 42*9880d681SAndroid Build Coastguard Worker; CHECK: stg [[REGISTER]], 0(%r3) 43*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 44*9880d681SAndroid Build Coastguard Worker %conv = zext i32 %r2 to i64 45*9880d681SAndroid Build Coastguard Worker store i64 %conv, i64* %r3 46*9880d681SAndroid Build Coastguard Worker ret void 47*9880d681SAndroid Build Coastguard Worker} 48