brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 6051a83 Raw
112 lines · plain
1; RUN: llc < %s -mtriple=armv7 | FileCheck %s2 3declare i16 @ret16(i16 returned)4declare i32 @ret32(i32 returned)5 6define i32 @test1(i32 %val) {7; CHECK-LABEL: test1:8; CHECK: bl {{_?}}ret169  %in = trunc i32 %val to i1610  tail call i16 @ret16(i16 returned %in)11  ret i32 %val12}13 14define i16 @test2(i32 %val) {15; CHECK-LABEL: test2:16; CHECK: b {{_?}}ret1617  %in = trunc i32 %val to i1618  tail call i16 @ret16(i16 returned %in)19  ret i16 %in20}21 22declare {i32, i8} @take_i32_i8({i32, i8} returned)23define { i8, i8 } @test_nocommon_value({i32, i32} %in) {24; CHECK-LABEL: test_nocommon_value:25; CHECK: b {{_?}}take_i32_i826 27  %first = extractvalue {i32, i32} %in, 028  %first.trunc = trunc i32 %first to i829 30  %second = extractvalue {i32, i32} %in, 131  %second.trunc = trunc i32 %second to i832 33  %tmp = insertvalue {i32, i8} undef, i32 %first, 034  %callval = insertvalue {i32, i8} %tmp, i8 %second.trunc, 135  tail call {i32, i8} @take_i32_i8({i32, i8} returned %callval)36 37  %restmp = insertvalue {i8, i8} undef, i8 %first.trunc, 038  %res = insertvalue {i8, i8} %restmp, i8 %second.trunc, 139  ret {i8, i8} %res40}41 42declare {i32, {i32, i32}} @give_i32_i32_i32()43define {{i32, i32}, i32} @test_structs_different_shape() {44; CHECK-LABEL: test_structs_different_shape:45; CHECK: b {{_?}}give_i32_i32_i3246  %val = tail call {i32, {i32, i32}} @give_i32_i32_i32()47 48  %first = extractvalue {i32, {i32, i32}} %val, 049  %second = extractvalue {i32, {i32, i32}} %val, 1, 050  %third = extractvalue {i32, {i32, i32}} %val, 1, 151 52  %restmp = insertvalue {{i32, i32}, i32} undef, i32 %first, 0, 053  %reseventmper = insertvalue {{i32, i32}, i32} %restmp, i32 %second, 0, 154  %res = insertvalue {{i32, i32}, i32} %reseventmper, i32 %third, 155 56  ret {{i32, i32}, i32} %res57}58 59define i32 @test_undef_asymmetry() {60; CHECK: test_undef_asymmetry:61; CHECK: bl {{_?}}ret3262; CHECK-NOT: jmp63  tail call i32 @ret32(i32 returned undef)64  ret i32 265}66 67define {{}, {{}, i32, {}}, [1 x i32]} @evil_empty_aggregates() {68; CHECK-LABEL: evil_empty_aggregates:69; CHECK: b {{_?}}give_i32_i32_i3270  %agg = tail call {i32, {i32, i32}} @give_i32_i32_i32()71 72  %first = extractvalue {i32, {i32, i32}} %agg, 073  %second = extractvalue {i32, {i32, i32}} %agg, 1, 074 75  %restmp = insertvalue {{}, {{}, i32, {}}, [1 x i32]} undef, i32 %first, 1, 176  %res = insertvalue {{}, {{}, i32, {}}, [1 x i32]} %restmp, i32 %second, 2, 077  ret {{}, {{}, i32, {}}, [1 x i32]} %res78}79 80define i32 @structure_is_unimportant() {81; CHECK-LABEL: structure_is_unimportant:82; CHECK: b {{_?}}give_i32_i32_i3283  %val = tail call {i32, {i32, i32}} @give_i32_i32_i32()84 85  %res = extractvalue {i32, {i32, i32}} %val, 086  ret i32 %res87}88 89declare i64 @give_i64()90define i64 @direct_i64_ok() {91; CHECK-LABEL: direct_i64_ok:92; CHECK: b {{_?}}give_i6493  %val = tail call i64 @give_i64()94  ret i64 %val95}96 97declare {i64, i32} @give_i64_i32()98define {i32, i32} @trunc_i64_not_ok() {99; CHECK-LABEL: trunc_i64_not_ok:100; CHECK: bl {{_?}}give_i64_i32101  %agg = tail call {i64, i32} @give_i64_i32()102 103  %first = extractvalue {i64, i32} %agg, 0104  %second = extractvalue {i64, i32} %agg, 1105  %first.trunc = trunc i64 %first to i32106 107  %tmp = insertvalue {i32, i32} undef, i32 %first.trunc, 0108  %ret = insertvalue {i32, i32} %tmp, i32 %second, 1109 110  ret {i32, i32} %ret111}112