1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker@var = global i1 0 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sextloadi32() { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sextloadi32 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker %val = load i1, i1* @var 9*9880d681SAndroid Build Coastguard Worker %ret = sext i1 %val to i32 10*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var] 11*9880d681SAndroid Build Coastguard Worker; CHECK: {{sbfx x[0-9]+, x[0-9]+, #0, #1|sbfx w[0-9]+, w[0-9]+, #0, #1}} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker ret i32 %ret 14*9880d681SAndroid Build Coastguard Worker; CHECK: ret 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine i64 @test_sextloadi64() { 18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sextloadi64 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker %val = load i1, i1* @var 21*9880d681SAndroid Build Coastguard Worker %ret = sext i1 %val to i64 22*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var] 23*9880d681SAndroid Build Coastguard Worker; CHECK: {{sbfx x[0-9]+, x[0-9]+, #0, #1}} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker ret i64 %ret 26*9880d681SAndroid Build Coastguard Worker; CHECK: ret 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine i32 @test_zextloadi32() { 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_zextloadi32 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; It's not actually necessary that "ret" is next, but as far as LLVM 33*9880d681SAndroid Build Coastguard Worker; is concerned only 0 or 1 should be loadable so no extension is 34*9880d681SAndroid Build Coastguard Worker; necessary. 35*9880d681SAndroid Build Coastguard Worker %val = load i1, i1* @var 36*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %val to i32 37*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var] 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker ret i32 %ret 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine i64 @test_zextloadi64() { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_zextloadi64 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker; It's not actually necessary that "ret" is next, but as far as LLVM 47*9880d681SAndroid Build Coastguard Worker; is concerned only 0 or 1 should be loadable so no extension is 48*9880d681SAndroid Build Coastguard Worker; necessary. 49*9880d681SAndroid Build Coastguard Worker %val = load i1, i1* @var 50*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %val to i64 51*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var] 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker ret i64 %ret 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 55*9880d681SAndroid Build Coastguard Worker} 56