brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.4 KiB · b685277 Raw
402 lines · plain
1; RUN: llvm-as < %s | llvm-dis | FileCheck %s2; RUN: verify-uselistorder %s3 4@addr = external global i645@addr_as1 = external addrspace(1) global i646 7define i64 @add_unsigned(i64 %x, i64 %y) {8; CHECK: %z = add nuw i64 %x, %y9	%z = add nuw i64 %x, %y10	ret i64 %z11}12 13define i64 @sub_unsigned(i64 %x, i64 %y) {14; CHECK: %z = sub nuw i64 %x, %y15	%z = sub nuw i64 %x, %y16	ret i64 %z17}18 19define i64 @mul_unsigned(i64 %x, i64 %y) {20; CHECK: %z = mul nuw i64 %x, %y21	%z = mul nuw i64 %x, %y22	ret i64 %z23}24 25define i64 @add_signed(i64 %x, i64 %y) {26; CHECK: %z = add nsw i64 %x, %y27	%z = add nsw i64 %x, %y28	ret i64 %z29}30 31define i64 @sub_signed(i64 %x, i64 %y) {32; CHECK: %z = sub nsw i64 %x, %y33	%z = sub nsw i64 %x, %y34	ret i64 %z35}36 37define i64 @mul_signed(i64 %x, i64 %y) {38; CHECK: %z = mul nsw i64 %x, %y39	%z = mul nsw i64 %x, %y40	ret i64 %z41}42 43define i64 @add_plain(i64 %x, i64 %y) {44; CHECK: %z = add i64 %x, %y45	%z = add i64 %x, %y46	ret i64 %z47}48 49define i64 @sub_plain(i64 %x, i64 %y) {50; CHECK: %z = sub i64 %x, %y51	%z = sub i64 %x, %y52	ret i64 %z53}54 55define i64 @mul_plain(i64 %x, i64 %y) {56; CHECK: %z = mul i64 %x, %y57	%z = mul i64 %x, %y58	ret i64 %z59}60 61define i64 @add_both(i64 %x, i64 %y) {62; CHECK: %z = add nuw nsw i64 %x, %y63	%z = add nuw nsw i64 %x, %y64	ret i64 %z65}66 67define i64 @sub_both(i64 %x, i64 %y) {68; CHECK: %z = sub nuw nsw i64 %x, %y69	%z = sub nuw nsw i64 %x, %y70	ret i64 %z71}72 73define i64 @mul_both(i64 %x, i64 %y) {74; CHECK: %z = mul nuw nsw i64 %x, %y75	%z = mul nuw nsw i64 %x, %y76	ret i64 %z77}78 79define i64 @add_both_reversed(i64 %x, i64 %y) {80; CHECK: %z = add nuw nsw i64 %x, %y81	%z = add nsw nuw i64 %x, %y82	ret i64 %z83}84 85define i64 @sub_both_reversed(i64 %x, i64 %y) {86; CHECK: %z = sub nuw nsw i64 %x, %y87	%z = sub nsw nuw i64 %x, %y88	ret i64 %z89}90 91define i64 @mul_both_reversed(i64 %x, i64 %y) {92; CHECK: %z = mul nuw nsw i64 %x, %y93	%z = mul nsw nuw i64 %x, %y94	ret i64 %z95}96 97define i64 @shl_both(i64 %x, i64 %y) {98; CHECK: %z = shl nuw nsw i64 %x, %y99	%z = shl nuw nsw i64 %x, %y100	ret i64 %z101}102 103define i64 @sdiv_exact(i64 %x, i64 %y) {104; CHECK: %z = sdiv exact i64 %x, %y105	%z = sdiv exact i64 %x, %y106	ret i64 %z107}108 109define i64 @sdiv_plain(i64 %x, i64 %y) {110; CHECK: %z = sdiv i64 %x, %y111	%z = sdiv i64 %x, %y112	ret i64 %z113}114 115define i64 @udiv_exact(i64 %x, i64 %y) {116; CHECK: %z = udiv exact i64 %x, %y117	%z = udiv exact i64 %x, %y118	ret i64 %z119}120 121define i64 @udiv_plain(i64 %x, i64 %y) {122; CHECK: %z = udiv i64 %x, %y123	%z = udiv i64 %x, %y124	ret i64 %z125}126 127define i64 @ashr_plain(i64 %x, i64 %y) {128; CHECK: %z = ashr i64 %x, %y129	%z = ashr i64 %x, %y130	ret i64 %z131}132 133define i64 @ashr_exact(i64 %x, i64 %y) {134; CHECK: %z = ashr exact i64 %x, %y135	%z = ashr exact i64 %x, %y136	ret i64 %z137}138 139define i64 @lshr_plain(i64 %x, i64 %y) {140; CHECK: %z = lshr i64 %x, %y141	%z = lshr i64 %x, %y142	ret i64 %z143}144 145define i64 @lshr_exact(i64 %x, i64 %y) {146; CHECK: %z = lshr exact i64 %x, %y147	%z = lshr exact i64 %x, %y148	ret i64 %z149}150 151define ptr @gep_nw(ptr %p, i64 %x) {152; CHECK: %z = getelementptr inbounds i64, ptr %p, i64 %x153	%z = getelementptr inbounds i64, ptr %p, i64 %x154        ret ptr %z155}156 157define ptr @gep_plain(ptr %p, i64 %x) {158; CHECK: %z = getelementptr i64, ptr %p, i64 %x159	%z = getelementptr i64, ptr %p, i64 %x160        ret ptr %z161}162 163define i64 @add_both_ce() {164; CHECK: ret i64 add nuw nsw (i64 ptrtoint (ptr @addr to i64), i64 91)165	ret i64 add nsw nuw (i64 ptrtoint (ptr @addr to i64), i64 91)166}167 168define i64 @sub_both_ce() {169; CHECK: ret i64 sub nuw nsw (i64 ptrtoint (ptr @addr to i64), i64 91)170	ret i64 sub nsw nuw (i64 ptrtoint (ptr @addr to i64), i64 91)171}172 173define ptr @gep_nw_ce() {174; CHECK: ret ptr getelementptr inbounds (i64, ptr @addr, i64 171)175        ret ptr getelementptr inbounds (i64, ptr @addr, i64 171)176}177 178define i64 @add_plain_ce() {179; CHECK: ret i64 add (i64 ptrtoint (ptr @addr to i64), i64 91)180	ret i64 add (i64 ptrtoint (ptr @addr to i64), i64 91)181}182 183define i64 @sub_plain_ce() {184; CHECK: ret i64 sub (i64 ptrtoint (ptr @addr to i64), i64 91)185	ret i64 sub (i64 ptrtoint (ptr @addr to i64), i64 91)186}187 188define ptr @gep_plain_ce() {189; CHECK: ret ptr getelementptr (i64, ptr @addr, i64 171)190        ret ptr getelementptr (i64, ptr @addr, i64 171)191}192 193define i64 @add_both_reversed_ce() {194; CHECK: ret i64 add nuw nsw (i64 ptrtoint (ptr @addr to i64), i64 91)195	ret i64 add nsw nuw (i64 ptrtoint (ptr @addr to i64), i64 91)196}197 198define i64 @sub_both_reversed_ce() {199; CHECK: ret i64 sub nuw nsw (i64 ptrtoint (ptr @addr to i64), i64 91)200	ret i64 sub nsw nuw (i64 ptrtoint (ptr @addr to i64), i64 91)201}202 203define i64 @add_signed_ce() {204; CHECK: ret i64 add nsw (i64 ptrtoint (ptr @addr to i64), i64 91)205	ret i64 add nsw (i64 ptrtoint (ptr @addr to i64), i64 91)206}207 208define i64 @sub_signed_ce() {209; CHECK: ret i64 sub nsw (i64 ptrtoint (ptr @addr to i64), i64 91)210	ret i64 sub nsw (i64 ptrtoint (ptr @addr to i64), i64 91)211}212 213define i64 @add_unsigned_ce() {214; CHECK: ret i64 add nuw (i64 ptrtoint (ptr @addr to i64), i64 91)215	ret i64 add nuw (i64 ptrtoint (ptr @addr to i64), i64 91)216}217 218define i64 @sub_unsigned_ce() {219; CHECK: ret i64 sub nuw (i64 ptrtoint (ptr @addr to i64), i64 91)220	ret i64 sub nuw (i64 ptrtoint (ptr @addr to i64), i64 91)221}222 223define i64 @test_zext(i32 %a) {224; CHECK: %res = zext nneg i32 %a to i64225  %res = zext nneg i32 %a to i64226  ret i64 %res227}228 229define float @test_uitofp(i32 %a) {230; CHECK: %res = uitofp nneg i32 %a to float231  %res = uitofp nneg i32 %a to float232  ret float %res233}234 235 236define i64 @test_or(i64 %a, i64 %b) {237; CHECK: %res = or disjoint i64 %a, %b238  %res = or disjoint i64 %a, %b239  ret i64 %res240}241 242define i32 @test_trunc_signed(i64 %a) {243; CHECK: %res = trunc nsw i64 %a to i32244  %res = trunc nsw i64 %a to i32245  ret i32 %res246}247 248define i32 @test_trunc_unsigned(i64 %a) {249; CHECK: %res = trunc nuw i64 %a to i32250  %res = trunc nuw i64 %a to i32251  ret i32 %res252}253 254define i32 @test_trunc_both(i64 %a) {255; CHECK: %res = trunc nuw nsw i64 %a to i32256  %res = trunc nuw nsw i64 %a to i32257  ret i32 %res258}259 260define i32 @test_trunc_both_reversed(i64 %a) {261; CHECK: %res = trunc nuw nsw i64 %a to i32262  %res = trunc nsw nuw i64 %a to i32263  ret i32 %res264}265 266define <2 x i32> @test_trunc_signed_vector(<2 x i64> %a) {267; CHECK: %res = trunc nsw <2 x i64> %a to <2 x i32>268  %res = trunc nsw <2 x i64> %a to <2 x i32>269  ret <2 x i32> %res270}271 272define <2 x i32> @test_trunc_unsigned_vector(<2 x i64> %a) {273; CHECK: %res = trunc nuw <2 x i64> %a to <2 x i32>274  %res = trunc nuw <2 x i64> %a to <2 x i32>275  ret <2 x i32> %res276}277 278define <2 x i32> @test_trunc_both_vector(<2 x i64> %a) {279; CHECK: %res = trunc nuw nsw <2 x i64> %a to <2 x i32>280  %res = trunc nuw nsw <2 x i64> %a to <2 x i32>281  ret <2 x i32> %res282}283 284define <2 x i32> @test_trunc_both_reversed_vector(<2 x i64> %a) {285; CHECK: %res = trunc nuw nsw <2 x i64> %a to <2 x i32>286  %res = trunc nsw nuw <2 x i64> %a to <2 x i32>287  ret <2 x i32> %res288}289 290define i1 @test_icmp_samesign(i32 %a, i32 %b) {291  ; CHECK: %res = icmp samesign ult i32 %a, %b292  %res = icmp samesign ult i32 %a, %b293  ret i1 %res294}295 296define <2 x i1> @test_icmp_samesign2(<2 x i32> %a, <2 x i32> %b) {297  ; CHECK: %res = icmp samesign ult <2 x i32> %a, %b298  %res = icmp samesign ult <2 x i32> %a, %b299  ret <2 x i1> %res300}301 302define ptr @gep_nuw(ptr %p, i64 %idx) {303; CHECK: %gep = getelementptr nuw i8, ptr %p, i64 %idx304  %gep = getelementptr nuw i8, ptr %p, i64 %idx305  ret ptr %gep306}307 308define ptr @gep_inbounds_nuw(ptr %p, i64 %idx) {309; CHECK: %gep = getelementptr inbounds nuw i8, ptr %p, i64 %idx310  %gep = getelementptr inbounds nuw i8, ptr %p, i64 %idx311  ret ptr %gep312}313 314define ptr @gep_nusw(ptr %p, i64 %idx) {315; CHECK: %gep = getelementptr nusw i8, ptr %p, i64 %idx316  %gep = getelementptr nusw i8, ptr %p, i64 %idx317  ret ptr %gep318}319 320; inbounds implies nusw, so the flag is not printed back.321define ptr @gep_inbounds_nusw(ptr %p, i64 %idx) {322; CHECK: %gep = getelementptr inbounds i8, ptr %p, i64 %idx323  %gep = getelementptr inbounds nusw i8, ptr %p, i64 %idx324  ret ptr %gep325}326 327define ptr @gep_nusw_nuw(ptr %p, i64 %idx) {328; CHECK: %gep = getelementptr nusw nuw i8, ptr %p, i64 %idx329  %gep = getelementptr nusw nuw i8, ptr %p, i64 %idx330  ret ptr %gep331}332 333define ptr @gep_inbounds_nusw_nuw(ptr %p, i64 %idx) {334; CHECK: %gep = getelementptr inbounds nuw i8, ptr %p, i64 %idx335  %gep = getelementptr inbounds nusw nuw i8, ptr %p, i64 %idx336  ret ptr %gep337}338 339define ptr @gep_nuw_nusw_inbounds(ptr %p, i64 %idx) {340; CHECK: %gep = getelementptr inbounds nuw i8, ptr %p, i64 %idx341  %gep = getelementptr nuw nusw inbounds i8, ptr %p, i64 %idx342  ret ptr %gep343}344 345define ptr addrspace(1) @gep_nusw_nuw_as1(ptr addrspace(1) %p, i64 %idx) {346; CHECK: %gep = getelementptr nusw nuw i8, ptr addrspace(1) %p, i64 %idx347  %gep = getelementptr nusw nuw i8, ptr addrspace(1) %p, i64 %idx348  ret ptr addrspace(1) %gep349}350 351define <2 x ptr> @gep_nusw_nuw_vec(<2 x ptr> %p, i64 %idx) {352; CHECK: %gep = getelementptr nusw nuw i8, <2 x ptr> %p, i64 %idx353  %gep = getelementptr nusw nuw i8, <2 x ptr> %p, i64 %idx354  ret <2 x ptr> %gep355}356 357define ptr @const_gep_nuw() {358; CHECK: ret ptr getelementptr nuw (i8, ptr @addr, i64 100)359  ret ptr getelementptr nuw (i8, ptr @addr, i64 100)360}361 362define ptr @const_gep_inbounds_nuw() {363; CHECK: ret ptr getelementptr inbounds nuw (i8, ptr @addr, i64 100)364  ret ptr getelementptr inbounds nuw (i8, ptr @addr, i64 100)365}366 367define ptr @const_gep_nusw() {368; CHECK: ret ptr getelementptr nusw (i8, ptr @addr, i64 100)369  ret ptr getelementptr nusw (i8, ptr @addr, i64 100)370}371 372; inbounds implies nusw, so the flag is not printed back.373define ptr @const_gep_inbounds_nusw() {374; CHECK: ret ptr getelementptr inbounds (i8, ptr @addr, i64 100)375  ret ptr getelementptr inbounds nusw (i8, ptr @addr, i64 100)376}377 378define ptr @const_gep_nusw_nuw() {379; CHECK: ret ptr getelementptr nusw nuw (i8, ptr @addr, i64 100)380  ret ptr getelementptr nusw nuw (i8, ptr @addr, i64 100)381}382 383define ptr @const_gep_inbounds_nusw_nuw() {384; CHECK: ret ptr getelementptr inbounds nuw (i8, ptr @addr, i64 100)385  ret ptr getelementptr inbounds nusw nuw (i8, ptr @addr, i64 100)386}387 388define ptr @const_gep_nuw_nusw_inbounds() {389; CHECK: ret ptr getelementptr inbounds nuw (i8, ptr @addr, i64 100)390  ret ptr getelementptr nuw nusw inbounds (i8, ptr @addr, i64 100)391}392 393define ptr @const_gep_nuw_inrange() {394; CHECK: ret ptr getelementptr nuw inrange(-8, 16) (i8, ptr @addr, i64 100)395  ret ptr getelementptr nuw inrange(-8, 16) (i8, ptr @addr, i64 100)396}397 398define ptr addrspace(1) @const_gep_nusw_nuw_as1() {399; CHECK: ret ptr addrspace(1) getelementptr nusw nuw (i8, ptr addrspace(1) @addr_as1, i64 100)400  ret ptr addrspace(1) getelementptr nusw nuw (i8, ptr addrspace(1) @addr_as1, i64 100)401}402