================ @@ -316,3 +316,82 @@ define <2 x i32> @test_trunc_both_reversed_vector(<2 x i64> %a) { %res = trunc nsw nuw <2 x i64> %a to <2 x i32> ret <2 x i32> %res } + +define ptr @gep_nuw(ptr %p, i64 %idx) { +; CHECK: %gep = getelementptr nuw i8, ptr %p, i64 %idx + %gep = getelementptr nuw i8, ptr %p, i64 %idx + ret ptr %gep +} + +define ptr @gep_inbounds_nuw(ptr %p, i64 %idx) { +; CHECK: %gep = getelementptr inbounds nuw i8, ptr %p, i64 %idx + %gep = getelementptr inbounds nuw i8, ptr %p, i64 %idx + ret ptr %gep +} + +define ptr @gep_nusw(ptr %p, i64 %idx) { +; CHECK: %gep = getelementptr nusw i8, ptr %p, i64 %idx + %gep = getelementptr nusw i8, ptr %p, i64 %idx + ret ptr %gep +} + +; inbounds implies nusw, so the flag is not printed back. +define ptr @gep_inbounds_nusw(ptr %p, i64 %idx) { +; CHECK: %gep = getelementptr inbounds i8, ptr %p, i64 %idx + %gep = getelementptr inbounds nusw i8, ptr %p, i64 %idx + ret ptr %gep +} + +define ptr @gep_nusw_nuw(ptr %p, i64 %idx) { +; CHECK: %gep = getelementptr nusw nuw i8, ptr %p, i64 %idx + %gep = getelementptr nusw nuw i8, ptr %p, i64 %idx + ret ptr %gep +} + +define ptr @gep_inbounds_nusw_nuw(ptr %p, i64 %idx) { +; CHECK: %gep = getelementptr inbounds nuw i8, ptr %p, i64 %idx + %gep = getelementptr inbounds nusw nuw i8, ptr %p, i64 %idx + ret ptr %gep +} + +define ptr @gep_nuw_nusw_inbounds(ptr %p, i64 %idx) { +; CHECK: %gep = getelementptr inbounds nuw i8, ptr %p, i64 %idx + %gep = getelementptr nuw nusw inbounds i8, ptr %p, i64 %idx + ret ptr %gep +} + +define ptr @const_gep_nuw(ptr %p, i64 %idx) { +; CHECK: ret ptr getelementptr nuw (i8, ptr @addr, i64 100) + ret ptr getelementptr nuw (i8, ptr @addr, i64 100) +} + +define ptr @const_gep_inbounds_nuw(ptr %p, i64 %idx) { +; CHECK: ret ptr getelementptr inbounds nuw (i8, ptr @addr, i64 100) + ret ptr getelementptr inbounds nuw (i8, ptr @addr, i64 100) +} + +define ptr @const_gep_nusw(ptr %p, i64 %idx) { +; CHECK: ret ptr getelementptr nusw (i8, ptr @addr, i64 100) + ret ptr getelementptr nusw (i8, ptr @addr, i64 100) +} + +; inbounds implies nusw, so the flag is not printed back. +define ptr @const_gep_inbounds_nusw(ptr %p, i64 %idx) { +; CHECK: ret ptr getelementptr inbounds (i8, ptr @addr, i64 100) + ret ptr getelementptr inbounds nusw (i8, ptr @addr, i64 100) +} + +define ptr @const_gep_nusw_nuw(ptr %p, i64 %idx) { +; CHECK: ret ptr getelementptr nusw nuw (i8, ptr @addr, i64 100) + ret ptr getelementptr nusw nuw (i8, ptr @addr, i64 100) +} + +define ptr @const_gep_inbounds_nusw_nuw(ptr %p, i64 %idx) { +; CHECK: ret ptr getelementptr inbounds nuw (i8, ptr @addr, i64 100) + ret ptr getelementptr inbounds nusw nuw (i8, ptr @addr, i64 100) +} + +define ptr @const_gep_nuw_nusw_inbounds(ptr %p, i64 %idx) { +; CHECK: ret ptr getelementptr inbounds nuw (i8, ptr @addr, i64 100) + ret ptr getelementptr nuw nusw inbounds (i8, ptr @addr, i64 100) +} ---------------- arsenm wrote:
Maybe test non-0 AS and vectors? https://github.com/llvm/llvm-project/pull/90824 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits