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